2015-03-19 90 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