2015-03-19 89 views
0

在shell脚本中,首先生成一个文件,然后使用gzip将其压缩,然后使用scp将其传输到远程机器。 gzip之前的问题成功完成了指向下一行代码的指针,因此我在远程机器上部分传输了gz文件。程序在gzip仍在运行时开始下一行代码

我在这里的意思是gzip命令启动zip,但在压缩完成之前(因为文件大小很大,所以需要一些时间才能完成压缩过程),下一行代码正在执行;这是scp,所以我在远程机器上进行了部分文件传输。

我的问题是gzip的选项是什么,我可以指定,并且在压缩过程成功完成之前指针不应该移动到下一行代码。

GZIP使用像下面在我的代码:

gzip -c <filename> > <zip_filename> 2>&1 | tee -a <log_filename> 

请建议。

回答

0

首先,如果我这样做

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