我有一个像这样的目录结构 -
./Archive1
./Archive1/Archive2
./Archive1/Archive3
在每个目录中都有许多tar
个文件。比如说(不要使用名称,例如它们) -
Archive1
├── Archive2
│ ├── tenth.tar.gz
│ └── third.tar.gz
├── Archive3
│ ├── fourth.tar.gz
│ └── sixth.tar.gz
├── fifth.tar.gz
├── first.tar.gz
└── second.tar.gz
现在我有一个文件file.txt
,它可以驻留在任何tar文件中。我需要一个命令,它会给我输出tar文件包含我的输入文件(file.txt
)以及tar文件的绝对路径。
例如,如果test.txt
位于sixth.tar.gz
中。输出将为sixth.tar.gz
和./Archive1/Archive3/
目前我有这个命令,但命令的缺点是,它列出了所有的tar文件 -
find . -maxdepth "3" -type f -name "*.tar.gz" -printf [%f]\\n -exec tar -tf {} \; | grep -iE "[\[]|file.txt"
答案 0 :(得分:1)
对于每个tar文件,您可以运行tar | grep
,如果匹配,则打印tar文件的名称。一种方法是为每个tar文件运行一个shell命令。对于少量文件,如果性能不是很重要,这可能就足够了,而且相当简单。
find . -maxdepth "3" -type f -name "*.tar.gz" -exec sh -c 'tar tf {} | grep -iEq "[\[]|file.txt" && echo {}' \;
例如,如果test.txt
位于sixth.tar.gz
,则输出将为./Archive1/Archive3/sixth.tar.gz
。