私がしようとするコマンドは( "butterflyinmotion.com"をディレクトリとして使用してtarを見つけようとしているので):
find / -name "*.tar.gz" -exec tar -tzf {} \; | grep -W butterflyinmotion
これは多くのエラーを表示し、動作しません。 grep -W は Butterflyinmotion.com がどのファイルにバックアップされているかを知るために必要です。ありがとうございます!
答え1
小さなスクリプトを作成して使用していると思いますfind -exec
。
たとえば、
#!/bin/sh エコ >>> $1” タールtvf"$1"
-exec ./script.sh "{}" \; を使用して呼び出し、結果をファイルにリダイレクトし、そのファイルを grep します。egrep '>>>|WhatYouLookFor' file
スクリプトでgrepを使用することもできます。
#!/bin/sh エコ >>> $1” tar tvf "$1" grep '何を探していますか?'
またはより柔軟に:
#!/bin/sh エコ >>> $2” tar tvf "$2" 検索 "$1" |
-exec ./script.sh 'WhatYouLookFor' "{}" \; を使用して呼び出します。
答え2
少なくともGNU grepを使用すると、次のことができます。
find / -name '*.tar.gz' -exec sh -c '
for t; do
tar -tvf "$t" | grep -m1 -l --label="$t" "butterflyinmotion"
done
' {} + 2>/dev/null
.tar.gz
これにより、アーカイブにパターンと一致する1つ以上のファイルを含むファイル名が出力されます。butterflyinmotion
GNU tarを使用すると(少なくとも単純モードでは)grepを省略し、tar -tf
exの終了状態を直接使用することが可能になります。
find / -name '*.tar.gz' -exec tar --wildcards -tf {} '*butterflyinmotion' \; -print 2>/dev/null
上記のコマンドは、一致するファイル(存在する場合)とそのあとにアーカイブ名を印刷します。