在阅读 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
') 选项添加到上面的调用中,您会注意到详细列表仍然包含完整的文件名,两个删除的组件仍然存在。