我写了一个小小的shell脚本(在CentOS上)从我们的APC UPS设备下载统计数据。 它工作的很好,但每天cron发送一封电子邮件与这个消息:
WARNING! 1 bare linefeeds received in ASCII mode File may not have transferred correctly.
当我在shell上手动获取文件时,我也会得到这个消息。 我的脚本的FTP部分如下所示:
ftp -in $ftpip <<END_FTP_DOWNLOAD user $ftpuser $ftppassword get data.txt bye END_FTP_DOWNLOAD
我怎样才能摆脱这可能会打扰我的同事的警告信息呢?
手动FTP连接看起来像这样。 我这次尝试input“ascii”:
220 AP9617 Network Management Card AOS v2.6.4 FTP server ready. Name (192.168.0.50:myusername): username 331 User name okay, need password. Password: 230 User logged in, proceed. ftp> ascii 200 TYPE Command okay. ftp> get data.txt local: data.txt remote: data.txt 227 Entering Passive Mode (192,168,0,50,161,31). 125 Data connection already open; transfer starting. WARNING! 1 bare linefeeds received in ASCII mode File may not have transferred correctly. 226 Closing data connection. 131468 bytes received in 19,3 secs (6,6 Kbytes/sec) ftp> bye 221 Thank you for using APC products!
data.txt有500到800行,最后一行是空的。
尝试使用二进制模式而不是ASCII模式。 它应该是这样的:
ftp -in $ftpip << END_FTP_DOWNLOAD user $ftpuser $ftppassword bin get $filename bye END_FTP_DOWNLOAD
现在我发现了一个(肮脏的)解决scheme:
我以BINARY模式下载文本文件,然后replace插入文件的^ M字符,因为它看起来像APC UPS基于DOS …
tr -d '\015' < data.txt > data-$today.txt
如果有人提出更好的解决scheme,那将是很好的,但这也是有效的。