從zip 檔案中找檔名含有某些字串的檔案/已經所含檔案中含有某個字串的檔案//grep
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