Shell-Script
for循環中的tar命令
我知道這是基本問題,但請幫助我。
tar
我使用命令壓縮並存檔了我的伺服器日誌文件for i in server.log.2016-07-05 server.log.2016-07-06 ; do tar -zcvf server2.tar.gz $i; done
上述循環的輸出是
server.log.2016-07-05 server.log.2016-07-06
但是在使用
tar -tvf server2.tar.gz
獲得的輸出列出文件時rw-r--r-- root/root 663643914 2016-07-06 23:59 server.log.2016-07-06
即,我歸檔了兩個文件,但只顯示了一個文件,這意味著歸檔沒有兩個文件,歸檔必須包含所有文件。請幫助解決這個問題。
我剛剛測試了這兩個文件,但我的文件夾有多個文件。由於我沒有得到預期的輸出,我沒有繼續處理我文件夾中的所有文件。我要使用的確切循環是
Previousmonth=$(date "+%b" --date '1 month ago') for i in $(ls -l | awk '/'$Previousmonth'/ && /server.log./ {print $NF}');do;tar -zcvf server2.tar.gz $i;done
每次執行循環時,都會執行命令
tar
將一個文件放入文件中server2.tar.gz
。該文件將結束,只有一個文件。使用 tar 選項附加文件:
tar --append -zcvf server2.tar.gz "$i"
或者只是將文件列表提供給 tar (請不要使用此命令):
tar -zcvf server2.tar.gz $(ls -l|awk '/'$Previousmonth'/&&/server.log./{print $NF}')
但是,該命令行有一些問題:
- 解析
ls
輸出(錯誤)。- 使用
$Previousmonth
未引用(錯誤)。- 建構可能包含嵌入空格的文件列表(不可靠)。
改用這個(一對)命令:
month=$(date "+%Y-%m-" --date '1 month ago') find ./ -name "server.log.${month}*" -exec tar -zcvf server2.tar.gz '{}' \+