web-dev-qa-db-ja.com

FTP:「警告!ASCII mode "メッセージで受信された1つの裸の改行」を取り除く方法?

APC UPSデバイスから統計情報をダウンロードするために(CentOSで)小さなシェルスクリプトを書きました。うまくいきますが、毎日のcronは次のメッセージをメールで送信します。

WARNING! 1 bare linefeeds received in ASCII mode File may not have transferred correctly.

シェルで手動でファイルを取得したときにも、このメッセージが表示されます。スクリプトのFTP部分は次のようになります。

ftp -in $ftpip <<END_FTP_DOWNLOAD
user $ftpuser $ftppassword
get data.txt
bye
END_FTP_DOWNLOAD

同僚の邪魔になる可能性があるこの警告メッセージを取り除くにはどうすればよいですか?

手動FTP接続は次のようになります。今回は「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行で、最後の行は常に空です。

7
cider

ASCIIモードの代わりにバイナリモードを使用してみてください。それは次のようになります:

ftp -in $ftpip << END_FTP_DOWNLOAD
user $ftpuser $ftppassword
bin
get $filename
bye
END_FTP_DOWNLOAD

今私は(汚い)解決策を見つけました:

APC UPSはDOSに基づいているように見えるため、バイナリモードでテキストファイルをダウンロードし、ファイルに挿入される^ M文字を置き換えます...

tr -d '\015' < data.txt > data-$today.txt

誰かがより良い解決策を思いついたらそれは素晴らしいでしょうが、これもうまくいきます。

6
cider