使用--strip-components = 1解压tar文件

时间:2016-12-20 13:11:09

标签: linux tar

我有一个tar文件,它有多个这样的文件夹:

code.tar
  bin/
    startup.sh
  WebServer/
    appname
    webappname
  Configuration/
    a.properties
    b.properties

如果我解压缩code.tar,我会得到一个文件夹名称code,其中包含所有文件夹结构,但我想提取code.tar的内容并获取子文件夹结构它(即bin/WebServer/configuration/和这些文件夹中的文件。)

当我使用tar -xzf code.tar -C <path> --strip-components=1时,我会获得子文件夹的所有内容,即startup.shappname等以及子文件夹 -

例如,在运行上面的命令时,我将所有这些文件夹和文件放在同一级别 -

bin/
startup.sh
WebServer/
appname
webappname
Configuration/
a.properties
b.properties

请帮助

2 个答案:

答案 0 :(得分:1)

你的命令似乎正确。

假设你有文件夹&#34; extract&#34;您想要将文件解压缩到: tar -xzf code.tar -C extract --strip-components = 1

所以这会截断上面的文件夹&#34; code&#34;并且只保留保留文件夹结构的内容。

答案 1 :(得分:0)

没有明确的标志允许tar只提取那个深度的文件而不是更深层的文件(这就是我解释问题的意思);通常,您需要明确指定要提取的内容; e.g。

tarfile="foo.tar.xz"
tar -xf "$tarfile" --strip-components=1 $(tar tf $tarfile | awk -F/ '{if (NF <= 2 && $NF != "") print; }')

我们使用tar(tar tf)中的条目列表并通过awk进行过滤,当我们找到包含<= 2个项目的任何条目时,这些目录不是{{1}然后我们打印它们。

这将为您提供需要从存档中提取的所有文件,然后将其传递给显式提取命令。