从压缩目标文件的存档文件列表中查明存档文件
Pinpoint archive file from a list of archive files where the target file is zipped
我有这样的目录结构-
./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"
对于每个 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
。
我有这样的目录结构-
./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"
对于每个 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
。