通过FTP命令或使用FTP命令的shell脚本上传到Linux服务器后的TAR大小差异

通过FTP命令或使用FTP命令的shell脚本上传到Linux服务器后的TAR大小差异,linux,shell,ftp,tar,Linux,Shell,Ftp,Tar,我有一个tar文件“backup_20140626”,大小为4477440。我通过FTP将其上传到运行Linux的NAS上,如下所示: >put backup_20140626 local: backup_20140626 remote: backup_20140626 229 Entering Extended Passive Mode (|||22735|) 150 Opening BINARY mode data connection for backup_20140626 100%

我有一个tar文件“backup_20140626”,大小为4477440。我通过FTP将其上传到运行Linux的NAS上,如下所示:

>put backup_20140626
local: backup_20140626 remote: backup_20140626
229 Entering Extended Passive Mode (|||22735|)
150 Opening BINARY mode data connection for backup_20140626
100% |*************************************|   423 MB   26.59 MB/s    00:00 ETA
226 Transfer complete
444477440 bytes sent in 00:15 (26.57 MB/s)
我下载了文件,可以打开了

然后我编写了一个脚本backup.sh来支持上传:

ftp -n 192.168.0.2 <<EOF
quote USER backup
quote PASS backup
cd /mnt/array1/_backup
put backup_20140626 
quit
EOF
同一文件的传输大小不同!我再次下载了该文件,但无法将其识别为tar文件:

#tar xvf backup_20140626
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

谁能告诉我这里怎么了?多谢各位

如果在tar文件上运行dos2unix,它会修复文件大小吗?如果是这样,那是因为不管程序说什么,它都是以ASCII(而不是二进制)传输的

您可以在脚本中指定“binary”,如果不想每次都重写脚本,也可以让它从参数中读取文件名:

ftp -n 192.168.0.2 <<EOF
quote USER backup
quote PASS backup
binary
cd /mnt/array1/_backup
put backup_20140626
quit
EOF
ftp-n 192.168.0.2在脚本中添加“binary”命令后,文件大小现在正常,可以再次打开。非常感谢你。经验教训:尽管FTP命令告诉我它通过连接打开了二进制模式,但实际上并没有:(
ftp -n 192.168.0.2 <<EOF
quote USER backup
quote PASS backup
binary
cd /mnt/array1/_backup
put backup_20140626
quit
EOF
ftp -n 192.168.0.2 <<EOF
quote USER backup
quote PASS backup
binary
cd /mnt/array1/_backup
put $1
quit
EOF