Gzip

使用 gzip 壓縮目錄中的文件,除了已經存在的 .gz 文件

  • August 1, 2016

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

我嘗試使用ls | grep -v gz | gzip,但這似乎不起作用。

有沒有辦法做到這一點?基本上我想壓縮目錄中不以.gz結尾的每個文件。

你可以這樣做:

gzip *

gzip 會告訴你它會跳過已經有.gz 結尾的文件。

如果該消息妨礙您使用:

gzip -q *

您嘗試的方法不起作用,因為gzip沒有從標準輸入讀取要壓縮的文件的文件名,為此您必須使用:

ls | grep -v gz | xargs gzip

您將gz在文件名中的任何位置排除具有該模式的文件,而不僅僅是在末尾。¹您還必須注意,ls當您的文件名包含空格、換行符等時,解析輸出是危險的。

一個更乾淨的解決方案,不依賴於gzip跳過帶有.gz結尾的文件,它還處理子目錄中的非壓縮文件:

find .  -type f ! -name "*.gz" -exec gzip {} \;

¹正如izkata評論:.gz單獨使用來改善這一點,是行不通的。您將需要使用grep -vF .gzor grep -v '\.gz$'。這仍然存在處理ls輸出的危險

引用自:https://unix.stackexchange.com/questions/160405