提取 tar 档案时从顶级目录中排除文件

问题描述 投票:0回答:1

我的 Linux 机器上有一个 .tar.gz 存档,我想提取它。 当我执行

tar -tf archive.tar.gz
时,我得到以下输出:

test1
a/ 
a/test1

我想做的是排除存档的顶级目录中的文件

test1
。但是,我还没有找到可行的解决方案...

我尝试做的是

tar -xvf archive.tar.gz --exclude=test1
。但是,这排除了所有出现的具有该名称的文件,因此它也排除了我不想排除的
a/test1
。 使用
tar -xvf archive.tar.gz --exclude=./test1
也不起作用(这不排除两个文件)。我想这是因为似乎没有“顶级目录”。但是,我无法控制档案的结构。由于
--exclude
选项似乎使用全局模式,我也无法使用像
--exclude=^test1
这样的表达式。 我不太确定现在该怎么做,因为我找不到一种方法来仅排除我想要排除的文件。

非常感谢您的帮助。

linux extract glob tar
1个回答
0
投票

我不知道这是否是最好的方法,但无论如何,它就是这样。

  1. 排除文件模式(test1)并列出所有目录和文件
tar -tf archive.tar.gz --exclude test1
  1. 使用此列表作为提取的输入
tar -xf archive.tar.gz $(tar -tf archive.tar.gz --exclude test1)

# or

tar -tf archive.tar.gz --exclude test1 | xargs tar -xf archive.tar.gz

对于我自己的存档中的以下目录层次结构

test1
b/b_2/
c/
b/b_1.txt
c/test1
a/test1
a/
b/b_1/
b/

我能够使用这种方法从顶层排除

test1

b/b_2/
c/
b/b_1.txt
c/test1
a/test1
a/
b/b_1/
b/
© www.soinside.com 2019 - 2024. All rights reserved.