Command-Line

如何告訴 gzip 保留原始文件?

  • July 4, 2021

我想在保留原始文件的同時使用 gzip 命令行工具壓縮文本文件。預設執行以下命令

gzip file.txt

導致修改此文件並重命名它file.txt.gz除了現有的壓縮文件之外,我還希望擁有這個新的壓縮文件,而不是這種行為file.txt。現在我正在使用以下命令來做到這一點

gzip -c file.txt > file.txt.gz

它有效,但我想知道為什麼沒有更簡單的解決方案來完成如此常見的任務?也許我錯過了這樣做的選擇?

對於 GNU gzip1.6 或更高版本、FreeBSD 及其衍生版本或 NetBSD 的最新版本,請參閱don_cristi 的回答

對於任何版本,您都可以使用 shell 重定向,如下所示:

gzip < file > file.gz

當沒有給出任何參數時,gzip讀取其標準輸入,對其進行壓縮並將壓縮後的版本寫入其標準輸出。作為獎勵,當使用 shell 重定向時,您不必擔心文件呼叫"--help""-"(後者仍然是 的問題gzip -c --)。

另一個好處gzip -c file > file.gz是,如果file無法打開,該命令將失敗而不會創建一個空的file.gz(或覆蓋現有的file.gz)並且根本不會執行gzip

與雖然相比的一個顯著區別gzip -k是,不會嘗試將file的元數據(所有權、權限、修改時間、未壓縮文件的名稱)複製到file.gz.

此外,如果file.gz已經存在,它將默默地覆蓋它,除非您noclobber在 shell 中打開了該選項(set -o noclobber例如在 POSIX shell 中)。

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