在 zip 文件的递归目录中查找文件
Finding a file within recursive directory of zip files
我有一个包含 zip 文件的完整目录结构。我愿意:
- 以递归方式遍历整个目录结构以获取所有 zip 文件
- 我想在这些 zip 文件之一中找到特定文件“*myLostFile.ext”。
我试过的
1. 我知道我可以很容易地递归列出文件:
find myLostfile -type f
2。我知道我可以列出 zip 存档中的文件:
unzip -ls myfilename.zip
如何在 zip 文件的目录结构中查找特定文件?
您可以使用 xargs
来处理 find 的输出,或者您可以执行如下操作:
find . -type f -name '*zip' -exec sh -c 'unzip -l "{}" | grep -q myLostfile' \; -print
将开始在 .
中搜索匹配 *zip
的文件,然后将 运行 unzip -ls
搜索每个文件并搜索您的文件名。如果找到该文件名,它将打印与其匹配的 zip 文件的名称。
您可以省略使用 for
循环方法对 .zip
文件的单级查找(或在 bash 4 中使用 globstar
递归)搜索:
for i in *.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
用于递归搜索 bash 4:
shopt -s globstar
for i in **/*.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
有些人建议使用 ugrep 来搜索 zip 文件和 tar 球。要查找包含 mylostfile
文件的 zip 文件,请将其指定为 -g
glob 模式,如下所示:
ugrep -z -l -g'myLostfile' ''
使用空正则表达式模式 ''
这会递归搜索工作目录下的所有文件,包括 mylostfile
的任何 zip、tar、cpio/pax 存档。如果您只想搜索位于工作目录中的 zip 文件:
ugrep -z -l -g'myLostfile' '' *.zip
我有一个包含 zip 文件的完整目录结构。我愿意:
- 以递归方式遍历整个目录结构以获取所有 zip 文件
- 我想在这些 zip 文件之一中找到特定文件“*myLostFile.ext”。
我试过的
1. 我知道我可以很容易地递归列出文件:
find myLostfile -type f
2。我知道我可以列出 zip 存档中的文件:
unzip -ls myfilename.zip
如何在 zip 文件的目录结构中查找特定文件?
您可以使用 xargs
来处理 find 的输出,或者您可以执行如下操作:
find . -type f -name '*zip' -exec sh -c 'unzip -l "{}" | grep -q myLostfile' \; -print
将开始在 .
中搜索匹配 *zip
的文件,然后将 运行 unzip -ls
搜索每个文件并搜索您的文件名。如果找到该文件名,它将打印与其匹配的 zip 文件的名称。
您可以省略使用 for
循环方法对 .zip
文件的单级查找(或在 bash 4 中使用 globstar
递归)搜索:
for i in *.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
用于递归搜索 bash 4:
shopt -s globstar
for i in **/*.zip; do grep -iq "mylostfile" < <( unzip -l $i ) && echo $i; done
有些人建议使用 ugrep 来搜索 zip 文件和 tar 球。要查找包含 mylostfile
文件的 zip 文件,请将其指定为 -g
glob 模式,如下所示:
ugrep -z -l -g'myLostfile' ''
使用空正则表达式模式 ''
这会递归搜索工作目录下的所有文件,包括 mylostfile
的任何 zip、tar、cpio/pax 存档。如果您只想搜索位于工作目录中的 zip 文件:
ugrep -z -l -g'myLostfile' '' *.zip