2017-07-27 13 views
-1

ファイル「mylog.zip」に文字列「12345」が含まれているすべてのファイルを圧縮します。 grep -lを使用していますが、ファイルを見つけてこのコマンドを使用できますが、ファイルは圧縮されません。bash - 文字列を含むファイルを検索して圧縮する方法は?

grep -l 12345 * | zip mylog.zip; 

私はそれがファイルを見つけ、コマンド

grep -l 12345 * 

を試してみてください。問題はこれをzipに渡す方法です。 bashのforループを使用して

+0

のgrep -r -l 12345 ./ | zip files.zip - @ – gzh

答えて

1
find -name "*12345*" -type f -print | zip name.zip [email protected] 

OR

find -name "*12345*" -type f -exec zip name.zip {} + 
+0

こんにちは、最初のコマンドで - @は何ですか? – suhao399

+1

@ hellio6 'man zip':_- @ファイルリスト。ファイルリストが - @ [MacOSではない]と指定されている場合、zipはコマンドラインからではなく標準入力から入力ファイルのリストを取ります。 –

1

もう一つ。必要に応じて変数の周りに適切な引用符を追加してください。この例では、私はたくさんのファイルにaをgrep:

$ for f in *.txt; do grep -q a $f; if [ $? -eq 0 ]; then zip my.zip $f ; fi ; done 
    adding: test1.txt (stored 0%) 
    adding: test3.txt (stored 0%) 

オープン著:

for f in *.txt 
do 
    grep -l a $f 
    if [ $? -eq 0 ] 
    then 
     zip my.zip $f 
    fi 
done 
+1

'grep -q'を使用することもできます。 –

+0

@AkshayHegdeありがとう。 '-l'は別の実験の残り物でした。 –

関連する問題