在shell脚本中我首先生成一个文件,然后使用gzip压缩它,然后使用scp将其传输到远程机器。 gzip之前的问题成功完成了指向下一行代码的指针,因此我正在远程机器中部分传输gz文件。
我的意思是gzip命令是启动zip但是在zip完成之前(因为文件大小很大,所以完成zip过程需要一些时间),下一行代码正在执行;这是scp,所以我在远程机器上进行部分文件传输。
我的问题是我可以指定gzip的选项是什么,并且指针在zip进程成功完成之前不应该移动到下一行代码。
GZIP在我的代码中使用如下:
gzip -c <filename> > <zip_filename> 2>&1 | tee -a <log_filename>
请建议。
答案 0 :(得分:1)
首先,如果我这样做
gzip -cr /home/username > homefolder.gz
bash在执行下一个命令之前一直等到命令结束(即使在脚本中使用)。
但是,如果我弄错了或者您在后台运行了命令,可以使用以下代码等待gzip完成:
#!/bin/bash
gzip -cr "$1" > "$1.gz" &
while true; do
if fuser -s "$1" "$1.gz"; then
echo "gzip still compressing '$1'"
else
echo "gzip finished compressing '$1' (archive is '$1.gz')"
break
fi
done
exit 0
或者,如果你只是想等一下,什么都不做,那就更简单了:
gzip -cr "$1" > "$1.gz"
while fuser -s "$1" "$1.gz"; do :; done
# copy your file wherever you want