Command-Line
如何告訴 gzip 保留原始文件?
我想在保留原始文件的同時使用 gzip 命令行工具壓縮文本文件。預設執行以下命令
gzip file.txt
導致修改此文件並重命名它
file.txt.gz
。除了現有的壓縮文件之外,我還希望擁有這個新的壓縮文件,而不是這種行為file.txt
。現在我正在使用以下命令來做到這一點gzip -c file.txt > file.txt.gz
它有效,但我想知道為什麼沒有更簡單的解決方案來完成如此常見的任務?也許我錯過了這樣做的選擇?
對於 GNU
gzip
1.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 中)。