我有一个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.sh
,appname
等以及子文件夹 -
例如,在运行上面的命令时,我将所有这些文件夹和文件放在同一级别 -
bin/
startup.sh
WebServer/
appname
webappname
Configuration/
a.properties
b.properties
请帮助
答案 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}然后我们打印它们。
这将为您提供需要从存档中提取的所有文件,然后将其传递给显式提取命令。