前几天写好一个linux下利用shell命令登陆ftp,下载文件,通过程序把下载的文件存入数据库中。
在后来的程序日志中发现,每行数据下面会多出一行空白,在文件中是看不出来的,程序区读的时候会有问题。
通过网站查找资料找问题,最后发现是ftp下载模式问题导致
两种模式为:
ASCII 和BINARY模式区别:
用HTML 和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。
BINARY模式用来传送可执行文件,压缩文件,和图片文件。
ASCII 模式和BINARY模式的区别是回车换行的处理,binary模式不对数据进行任何处理,asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r
ascii模式下会转换文件
不能说是不同系统对回车换行解释不同
而是不同的系统有不同的行结束符
unix系统下行结束符是一个字节,即十六进制的0A
而ms的系统是两个字节,即十六进制的0D0A
刚开始的时候用的是BINARY模式,下载的文件有问题。修改为ASCII 模式以后,程序读写下载的文件没有问题。
下载代码:
#!/bin/bash
dd=`date -d last-day +%Y-%m-%d`
ftp -n<<!
open ip
user name@password
ascii(就是这个位置)
cd /
lcd /webapp/upload_song
prompt
get deldb_$dd.txt deldb_$dd.txt
get updatedb_$dd.txt updatedb_$dd.txt
close
bye
!
dd=`date -d last-day +%Y-%m-%d`
ftp -n<<!
open ip
user name@password
ascii(就是这个位置)
cd /
lcd /webapp/upload_song
prompt
get deldb_$dd.txt deldb_$dd.txt
get updatedb_$dd.txt updatedb_$dd.txt
close
bye
!