2015-06-04 86 views
0

我有以下shell腳本。如果文件夾中沒有文件,則會引發以下錯誤。那麼,我們如何處理這個問題,以便腳本不會停止執行?在shell腳本中處理錯誤

錯誤:

mv: cannot stat `*': No such file or directory 

腳本:

for file in * 
    do 
     fl=$(basename "$file")    
     flname="${fl%%.*}"    
     gunzip "$file" 
     mv "$flname" "$flname-NxDWeb2" 
     tar -zcf "$flname-NxDWeb2".tar.gz "$flname-NxDWeb2" 
     rm "$flname-NxDWeb2" 
done; 

回答

2

如果shell bash,你可以讓*擴大爲空字符串:你的循環之前shopt -s nullglob

順便說一句,如果你的邏輯不完全符合gunzip(如果名稱中有多個點,它可能不會完全符合),你可能想明確指定未壓縮的文件名,該文件與.tgz.taz結束):

gunzip -c "$file" >"$flname" 

(你將需要刪除自己原來在此情況下,雖然)

你可以不用移動,也:

flname="${fl%%.*}-NxDWeb2" 

而且您可能需要使用trap以確保您的臨時對象在故障情況下被清除(可能使您的臨時對象也在$TMPDIR中)。