我的 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
这样的表达式。
我不太确定现在该怎么做,因为我找不到一种方法来仅排除我想要排除的文件。
非常感谢您的帮助。
我不知道这是否是最好的方法,但无论如何,它就是这样。
tar -tf archive.tar.gz --exclude test1
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/