等到zip完全写入然后继续,Bash脚本

时间:2014-12-01 23:18:20

标签: bash ftp zip corrupt

我一直在尝试压缩文件,然后使用bash脚本通过FTP上传,但它正在上传损坏的zip文件。我已经环顾四周,我正在尝试使用lsof | grep确认文件已完成,但我不确定我在做什么。

所以我有

cd /var/test/tobezipped
zip -r test.zip *
FOLDER="/var/test/tobezipped"
ZIPS=$(ls $FOLDER)
for F in $zips ; do
  while [ -n "$(lsof | grep $F" ] ; do
  sleep 1
done
ftp -n <<EOF
open myserver
user user pass
put test.zip
EOF
done

并且test.zip在上传时已损坏,所以在另一台服务器上它是不可读的,但在服务器上它被压缩就可以了,直到我检查它。

任何建议都值得赞赏,我对这类事情都很陌生,并试图寻找解决方案,不太确定我是朝着正确的方向前进。提前谢谢。

2 个答案:

答案 0 :(得分:4)

从手册页:

  

放置local-file [remote-file]                    将本地文件存储在远程计算机上。如果未指定remote-file,则使用本地文件名   按照处理                    命名远程文件时的任何ntrans或nmap设置。文件传输使用当前设置的类型,格式,模式,   和结构。

我想问题是你没有在BINARY模式下传输文件。

试试这个:

ftp -n <<EOF
open myserver
user user pass
binary
put test.zip
EOF

答案 1 :(得分:0)

试试这个。

PID=$(pgrep zip)
while [[ ( -d /proc/$PID) ) && ( -z `grep zombie /proc/$PID/status` ) ]]; do
    sleep 1
done