我想修剪 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
一个相对路径,并让它在正确的目录中运行以使相对路径正常工作:或者
GNU 手册页描述
-C
为:但据我所见,由 给出的文件
-f
仍然是从目录tar
开始使用的,即使-C
是先给出的。如果你想在提取时修复它,至少 GNU tar 有它告诉它删除文件名的前导部分。例如,使用 .like 的文件名将被提取为.
--strip-components=N
--strip-components=2
/tmp/gzip-expt/repo/src-tree/...
repo/src-tree/...