我有一個日誌目錄,我想設定一個作業來壓縮使用壓縮包。問題是我不想重新壓縮已經壓縮的日誌。
我嘗試使用ls | grep -v gz | gzip
,但這似乎不起作用。
有沒有辦法做到這一點?基本上我想對目錄中不以 .gz 結尾的每個檔案進行 gzip 壓縮。
答案1
你可以這樣做:
gzip *
gzip 會告訴您它會跳過已經有結尾的檔案.gz
。
如果該訊息妨礙您可以使用:
gzip -q *
您嘗試的方法不起作用,因為gzip
沒有從標準輸入讀取要壓縮的檔案的檔案名,要使其工作,您必須使用:
ls | grep -v gz | xargs gzip
您將排除文件名中任何位置具有該模式的gz
文件,而不僅僅是在末尾。ls
一個更乾淨的解決方案,不依賴於gzip
跳過帶有.gz
結尾的文件,它還處理子目錄中的非壓縮文件:
find . -type f ! -name "*.gz" -exec gzip {} \;
1正如所izkata
評論的:.gz
單獨使用來改善這一點是行不通的。您需要使用grep -vF .gz
或grep -v '\.gz$'
。這仍然存在處理ls
“輸出”的危險