使用 tar -xzvf 刪除虛假目錄,同時進行壓縮
我想修剪 gunzipped tarball 的路徑,以便排除一些“虛假”的前導目錄。讓我用一個例子來解釋。
我有以下目錄結構,由
tree
命令輸出:tree /tmp/gzip-expt /tmp/gzip-expt ├── gunzip-dir ├── gzip-dir └── repo └── src-tree ├── l1file.txt └── sub-dir └── l2file.txt 5 directories, 2 files
我想在 gzip-dir 中壓縮 src-tree 所以這就是我要做的:
cd /tmp/gzip-expt/gzip-dir tar -czvf file.tar.gz /tmp/gzip-expt/repo/src-tree
隨後我在 gunzip-dir 中 gunzip file.tar.gz 所以這就是我所做的:
cd /tmp/gzip-expt/gunzip-dir tar -xzvf /tmp/gzip-expt/gzip-dir/file.tar.gz
tree /tmp/gzip-expt/gunzip-dir
顯示以下輸出:/tmp/gzip-expt/gunzip-dir └── tmp └── gzip-expt └── repo └── src-tree ├── l1file.txt └── sub-dir └── l2file.txt
但是,我想
tree /tmp/gzip-expt/gunzip-dir
顯示以下輸出:/tmp/gzip-expt/gunzip-dir └── src-tree ├── l1file.txt └── sub-dir └── l2file.txt
換句話說,我不想看到路徑的“虛假” tmp/gzip-expt/repo 部分。
它們不是虛假的,它只是儲存它被告知儲存的內容。
特別是,給定 path
/tmp/gzip-expt/repo/src-tree
,它不知道應該保留路徑的哪些部分,如果文件應該儲存為/tmp/gzip-expt/repo/src-tree/l1file.txt
,或者src-tree/l1file.txt
等等l1file.txt
。它在提取 tarball 時會有所不同,如果存檔具有前導目錄,它是在提取時創建的。如果不是,那就不是。給出
tar
一個相對路徑,並讓它在正確的目錄中執行以使相對路徑正常工作:cd /tmp/gzip-expt/repo tar -czvf /tmp/gzip-expt/gzip-dir/file.tar.gz ./src-tree
或者
cd /tmp/gzip-expt/gzip-dir tar -C /tmp/gzip-expt/repo -czvf file.tar.gz ./src-tree
GNU 手冊頁描述
-C
為:
-C
,--directory=DIR
在執行任何操作之前更改為 DIR。這個選項是順序敏感的,即它影響後面的所有選項。但據我所見,由 給出的文件
-f
仍然是從目錄tar
開始使用的,即使-C
是先給出的。如果你想在提取時修復它,至少 GNU tar 有它告訴它刪除文件名的前導部分。例如,使用 .like 的文件名將被提取為.
--strip-components=*N*``--strip-components=2``/tmp/gzip-expt/repo/src-tree/...``repo/src-tree/...