1. 程式人生 > >從zip 檔案中找檔名含有某些字串的檔案/已經所含檔案中含有某個字串的檔案//grep

從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