0. 在非zip文件中查找含有某个字符串的文件:
grep -ir '200880288193' dd/
grep -r 'matching str' path
1.zip file 中文件名含有"ABC" 的文件 :
find . -name '*.zip' -exec grep -qi 'ABC' {} /; -exec echo {} /;
2.zip file 中的文件内容中含有字符串ABCDEF的文件:
for file in *.zip; do if unzip -p $file | strings | grep "ABCDEF" > /dev/null; then echo $file; fi; done
note: unzip -p
-p extract files to pipe (stdout). Nothing but the file data is sent to stdout, and the files are always extracted in binary format, just as they are stored (no conversions).
grep -qi
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files.
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected.Also see the -s or --no-messages option.
-R, -r, --recursive
Read all files under each directory, recursively; this is equivalent to the -d recurse option.
another try (almost same):
#!/bin/su $searchstring=$1 for zipfile in *.zip do unzip -qq -l $zipfile | awk '{ print $4 }' | while read file do if unzip -p $zipfile $file | grep $searchstring > /dev/null then echo "$zipfile / $file" fi done done