2017-11-13 14 views
0

filename*.tar.gzリストでは、file1.txtがあるtarファイル名を表示する必要があります。 この命令を改善するにはどうすればよいですか?特定のファイルを含むタールリストとタールファイル名を表示する

あなたがこれまでのパターン「FILE1.TXT」と一致し tarのエントリを出力しますが、それはエントリが含まれている tarファイル自体の名前を印刷しない何
for file in filename*.tar.gz; do tar -ztvf "$file" | grep 'file1.txt' ;done 

答えて

1

あなたがfile1.txtが含まれているtarファイルの名前を印刷したい場合は、あなたがこのような条件付きステートメントを使用することができます

for file in filename*.tar.gz; do 
    if tar ztf "$file" | grep -q file1.txt; then 
     echo "$file" 
    fi 
done 

をここに条件がgrepの終了コードです。パターンが見つかった場合、grepはゼロで終了します。これは成功を意味し、echo "$file"が実行されます。

はまた、私はそれ静か作るためにgrep-qフラグを追加したことに注意してください、そして、それはデフォルトではないとして、マッチした行を印刷しないでください。このフラグでgrepは何も出力せず、条件文を決定するために終了コードのみが必要です。

よりコンパクト同等:

for file in filename*.tar.gz; do 
    tar ztf "$file" | grep -q file1.txt && echo "$file" 
done