如何在没有根文件夹的情况下解压缩存档,但在其中保留完整的层次结构?

cal*_*lum 52 command-line tar

如果我有一个.tar存档,当我解压缩它时,它会给我一个foo包含更多内容的文件夹,如下所示:

foo/
  something.txt
  another.txt
  bar/
    something-else.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法可以修改.tar命令以“跳过”根文件夹(foo在这种情况下),然后直接将该文件夹的所有内容提取到我的 cwd 中,如下所示:

something.txt
another.txt
bar/
  something-else.txt
Run Code Online (Sandbox Code Playgroud)

Gia*_*968 60

简单。只需--strip-components=1像这样在存档上使用:

tar -xf archive.tar --strip-components=1
Run Code Online (Sandbox Code Playgroud)

正如官方tar手册页所述:

--strip-components=NUMBER

提取时从文件名中去除 NUMBER 个主要成分

与逻辑是如果一个路径由foo/something.txt则该路径的第一“部件”将是foo/这样--strip-components=1将有效地丢弃foo/从路径foo/something.txt

  • 我建议仅将其用于您知道其结构的 tar 文件。注意`--strip-components` 不只是去除前导目录,如果你有一个 * 没有 * 目录作为其顶级条目的 tar 文件(例如,如果 tar 文件的内容是 [file1. txt, somedirectory/] 这个命令不会提取file1.txt。我还没有找到一种方法,它只剥离顶级*目录*,而不会导致其他类型的tar文件出现问题,这些tar文件只是将普通文件作为其顶级条目。 (3认同)