バイナリデータと、大きな(> 1 Mb)および小型(< 1 Mb)のXMLファイルを含む7zファイルがあります。
特定の文字列を含む小さなXMLファイルを見つけたいです。 zgrepを使ってみましたが、すべてのファイルを検索しているようです。
編集:私がしたことは、.7z内のすべてのxmlファイルのリストを作成し、6桁の行だけを把握し、ファイル名のみをコピーして抽出することでした。より効率的な方法がありますか?
7z l test.7z *.xml > tmplist1
num="6"
grep -E "\s[0-9]{$num}\s" tmplist1 | grep -oE '[^[:space:]]+$' | sed "s/^/*/" > tmplist2
7z e -o/tmp test.7z -i@tmplist2 -aos
grep -E "*string*" /tmp/*.xml > tmplist3
答え1
何について
find . -iname "*.7z" -o -iname "*.xml" -size -1M -exec grep -options {} \;
?現在の作業ディレクトリと名前の最後に、ブロックデバイス、バッファリングさfind
れていない特殊文字エントリ、ディレクトリ、ファイル、シンボリックリンク、名前付きFIFOパイプ、ソケットなど
.
(このパスが唯一のパスである場合は不要)を探します(大文字と小文字の区別しない)。 )または(論理的に)名前の末尾に1 MB未満のサイズを追加し、見つかったすべてのファイルに対して実行して独自のオプションに置き換えます。
-iname "*.xml"
.xml
-o
-iname "*.7z"
.7z
.7Z
-size -1M
-exec grep -options {}
grep
-options
\;
-exec