Shell
如何從大型 tar.gz 存檔中提取單個文件夾?
我在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
將歸檔絕對路徑。因此,在提取之前檢查大檔案的內容總是值得的。