The reason is that the end of a line is represented differently in DOS and UNIX. In DOS (and similar OSes) the end of a line is represented by two characters: CR (carriage return) and LF (line feed). his is much like the behaviour of a typewriter (the archetype of computer files), where at the end of a line, you wouls swing back the writing head to the beginning of the line (CR) and then feed some amount of paper to not overwrite the same line but write below it on the next (LF).
So, when you see some text in DOS (like in notepad or so) which looks like:
in fact this would be the following succession of bytes:
line 1<CR><LF>line2<EOF>
Look at the file using a hex editor and you will see what i mean.
In UNIX the situation is differently: There is a special end-of-line-character, which denotes the end of a line. The same file under UNIX would look like (try it out by using the "od -ax" command)
line 1<EOL>line2<EOF>
Utilities like dos2unix do nothing else than convert the one format into the other by changing the <CR><LF>-sequences to <EOL>-characters and vice versa.
You don't even need these utilities when you transfer the file with ftp using the ASCII-mode instead of the binary mode. This is exactly the difference between the two. "Binary" means "do not exchange any CR/LF characters to <EOL> and vice versa" and "ASCII" means "do exchange..."
When you transfer the file in compressed format the ftp program will not recognize the ASCII format, because the compressed file is a binary file. Otherwise, when you transfer the text file in its natural form, many ftp-clients recognize it as text and switch to ASCII mode automatically, if yours does not you can simply switch yourself by issuing the "as" subcommand (and the "bi" subcommand to get back to binary mode again).
If you have transferred the file already and do not want to retransmit it you can easily change the file with sed:
sed 's/^M$//' file > file.changed
To enter the CTRL-M-char from the command line you can enter <CTRL>-V and then <CTRL>-M (hold down the <CTRL> key while pressing V or M respectively).
this is a simple sed-command substituting a "^M"-character followed by an end of line ("$") to "nothing", that is: deleting it. Note, that "^M" is NOT two characters, as in "caret-char, followed by an "M", but one character.
You cannot enter it directly by pressing down the <CTRL>-key and then press down <M>m as this would be translated to "end of line" by the shell. It would have the same effect as hitting the "<ENTER>"-key - open the next line of text. This is why you have to escape this character, which is done by first entering <CTRL>-V (hold down the CTRL-key, then press the <V>-key, then release the <CTRL>-key again) and only then enter the <CTRL>-M, which will now not be interpreted, but taken literally.
Hi Folks,
While transferring file from FTP software like Filezilla the files gets corrupted.
Is there any way I can check if the recently transferred file is in ASCII and not corrupted. I have tried using file -i filename command which does tell if the file character set is ASCII or binary... (6 Replies)
I have a bash script that is running a mysql query and creating a csv file with a time stamp. It then uploads that to a ftp server. Everything works great when I manually run it. But then I have a cron job set to run every monday, wednesday and friday at 5am est. When the cron job runs, it... (7 Replies)
Below is my script code.which shows the environment name and then fetch the file from the ftp server but I am facing one issue.The script should be run in both way.We can pass the arguments with script and select the environment name then file name.Here the issue is I am not able to list the files... (1 Reply)
hi all i want a script to FTP a file and should generate a quality checksum file
means when I FTP a file from one server to another server it should generate a QC file which should contain timestamp,no.of records in that file
Thanks in advance
saikumar (3 Replies)
Hi,
I'm working on a script which has to copy multiple files from one server to another server. The list of files that are to be copied is present in a file say input.txt.
vi input.txt
abc.c
welcome.c
new.c
welcome1.c
for ftp'ing a single file say 'new.c' the following code... (2 Replies)
Hello All,
I am trying to connect to ftp server and get the files. Also i need to rename the file in other ftp dir.
rename method is not allowing me to rename the file in other dir. When i tried copy command by using net::FTP:FILE then perl says it is not installed.
Can some body help me to... (2 Replies)
Hi,
I am getting error when i am deleting file from FTP and also transferring file from local to FTP server.
I am getting 221 error. I am getting this error some time only.
Some time the existing file from FTP is deleted and file from local directory is transferred to FTP server.
... (2 Replies)
Hi,
We have some clients who will place huge files in to one of the remote server.
And the shell script written in our local server to retrieve client files (using FTP) placed on one of the remote server of ours by clients.
My question Is there any FTP command/script to check from my local... (1 Reply)
hi,
I have one file located in ftp.I want to place that file in different ftp location.
Up to now i am doing it manually using get command and copying that file in to my local system and then putting that file in different ftp using put command.
now i want to automate that using shell... (1 Reply)
Hello,
A couple of times per week, i receive emails notifications when files are available for processing.
Currently i read these eamails with a java program and store the attachement on my C: drive and would now like to generate a PC script to send this file name up to UNIX-Solaris and... (3 Replies)