Shell

如何從大型 tar.gz 存檔中提取單個文件夾?

  • September 8, 2018

我在5GB存檔上使用此命令

tar -zxvf archive.tar.gz /folder/in/archive

這是正確的方法嗎?它似乎永遠沒有命令行輸出……

tar預設儲存相對路徑。如果您嘗試儲存絕對路徑,GNU tar 甚至會這樣說:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

如果您需要提取特定文件夾,請查看 tar 文件中的內容:

tar -tvf foo.tar

並記下確切的文件名。對於我的foo.tar文件,我可以這樣提取/home/foo/bar

tar -xvf foo.tar home/foo/bar # Note: no leading slash

所以不,您發布的方式不是(必然)正確的方式。您必須省略前導斜杠。如果要模擬絕對路徑,cd /請先執行並確保您是超級使用者。此外,這也是一樣的:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

tar將路徑轉換為相對路徑有非常明顯的充分理由。一個是能夠在原始來源以外的地方恢復檔案。另一個是安全性。您可以提取檔案,期望其文件出現在您目前的工作目錄中,然後錯誤地覆蓋其他地方的系統文件(或您自己的工作)。

注意:如果您使用該-P選項,tar 歸檔絕對路徑。因此,在提取之前檢查大檔案的內容總是值得的。

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