运行 tar 命令手册中的示例时,选项 --strip-components 出错

运行 tar 命令手册中的示例时,选项 --strip-components 出错

在阅读 tar 命令手册时,我遇到了选项错误--strip-components。手册中的示例是有一个 tar 文件,其中包含一个包含 3 个文件的目录。当使用 tar 命令列出时,它看起来像这样:

$tar -tf music.tar
practice/
practice/blues
practice/folk
practice/jazz

手册说选项--strip-components

允许您删除一定数量的前导目录组件

tar --extract --file=music.tar --strip-components=1 folk

会将文件“ folk”提取到当前工作目录中。

但是当我在Ubuntu上运行这个命令时,我得到了这个错误

tar: folk: Not found in archive
tar: Exiting with failure status due to previous errors

我的 tar 版本是 1.34。此外,当我执行下面的命令时,我成功提取了文件folk

tar --extract --file=music.tar --strip-components=1 practice/folk

我对手册和选项有什么误解吗--strip-components?还是说明书有问题?

答案1

该特定示例是错误的 - 您仍然需要指定存档内文件的完整路径。否则,给定一个 tar 文件,例如:

$ tar -tf foo.tar
a/
a/folk
b/folk
b/blues

无法tar判断您指的是哪个文件tar --extract --file=foo.tar --strip-components=1 folk

记录该部分--strip-components(6.7 修改文件名和成员名)有一个正确的例子:

例如,假设您已将整个“ /usr”层次结构存档到名为“ ”的 tar 存档中usr.tar。在其他文件中,此存档包含“ usr/include/stdlib.h”,您希望将其提取到当前工作目录。为此,您输入:

$ tar -xf usr.tar --strip=2 usr/include/stdlib.h

选项 ' ' 指示 tar 去除文件名中的--strip=2两个前导部分(' usr/' 和 ' ')。include/

如果您将 ' --verbose' (' -v') 选项添加到上面的调用中,您会注意到详细列表仍然包含完整的文件名,两个删除的组件仍然存在。

相关内容