使用 gzip 壓縮目錄中除已存在的 .gz 檔案之外的文件

使用 gzip 壓縮目錄中除已存在的 .gz 檔案之外的文件

我有一個日誌目錄,我想設定一個作業來壓縮使用壓縮包。問題是我不想重新壓縮已經壓縮的日誌。

我嘗試使用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 .gzgrep -v '\.gz$'。這仍然存在處理ls“輸出”的危險

相關內容