Compression

使用 Gnu/Linux 命令行將一個文件壓縮成另一個文件

  • May 18, 2020

我正在嘗試獲取包含名為 的文本的文件MyFile,並將其壓縮到MyFileComp同一目錄中的名為 的文件中。

我努力了:

gzip MyFile | touch MyFileComp
gzip MyFile >> MyFileComp

兩個命令 create MyFileComp,但是當我打開文件時它是空的。當我嘗試解壓縮文件時,它顯示未知後綴。我不知道那是什麼意思。

非常感謝任何幫助。謝謝

我認為您沒有正確壓縮它。使用 -c 將其發送到標準輸出並在末尾添加“.gz”。是這個問題嗎?

gzip -c MyFile > MyFileComp.gz
gzip -d MyFileComp.gz

預設情況下,該gzip工具會.gz在壓縮命令行中給出的名稱的文件時創建一個文件名後綴為後綴的文件。同樣,當使用 解gzip -d壓縮文件時,在命令行上給定壓縮文件的名稱,它希望.gz 在文件名的末尾找到一個後綴,並將刪除該後綴以創建未壓縮數據的文件名。

如果您不想遵守這種行為,即您希望您的壓縮文件根本沒有文件名後綴,並且您想用 解壓縮這些gzip -d文件,那麼您不能在命令行上將文件名提供給gzip. 相反,讓我們gzip從標準輸入讀取並寫入標準輸出。

壓縮:

gzip <my_file >my_compressed_file

解壓:

gzip -d <my_compressed_file >my_file

從技術上講,您應該使用-c上述兩個命令,但由於gzip在命令行上沒有給出文件名,因此它將從標準輸入讀取並寫入標準輸出,並且這些流是通過重定向提供的。

另請注意,對於上述兩個命令,源數據(無論是壓縮命令的源還是解壓縮命令的源)都將保留在原處,而如果您gzip像通常使用該工具一樣使用它,則通過在在命令行中,源文件通常會被刪除,除非使用了-k( --keep) 選項。


你的命令

gzip MyFile | touch MyFileComp

執行這兩個命令gzip MyFile並且touch MyFileComp彼此獨立。沒有數據寫入管道gzip,即使有,touch也不會讀取它。你最終得到的是一個被呼叫的壓縮文件MyFile.gz和一個被呼叫的空文件MyFileComp(假設這個文件不存在)。文件MyFile被刪除。

你的命令

gzip MyFile >> MyFileComp

像以前一樣壓縮MyFileMyFile.gz並且由於gzip不向標準輸出寫入任何內容,因此它將創建空文件MyFileComp(假設該文件不存在)。文件MyFile被刪除。

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