tarリストファイル、最初のファイルで中断

tarリストファイル、最初のファイルで中断

私は同様の投稿から取得し、次のスニペットを使用しています。https://unix.stackexchange.com/a/101273/212793- ファイルからファイル名を取得するtar.gz

tar tzf "archive.tar.gz" | awk -F/ '{ if($NF != "") print $NF }'

私の場合は、特定のファイルが1つだけ必要なので、次のようなものを使用します。

tar tzf "archive.tar.gz" | awk -F/ '{ if($NF != "") print $NF }' | grep -e "^..*my-file-name\\.ext$"

問題は、私.tar.gzが大きく、ファイルがたくさん含まれていることです。しかし、それぞれは始めに同様の「ハッシュ」が追加されています(したがって^..*私のgrep'd正規表現の一部です)。

したがって、これらのファイルは次のようになります。

- 4b77e4e1_file-a.ext
- 4b77e4e1_file-b.ext
- 4b77e4e1_file-c.ext
# ect.

tar tzf "archive.tar.gz" | awk -F/ '{ if($NF != "") print $NF }'すべてのファイル()ストリーム出力を取得するコマンドを確認しました。

アイデアは、ストリームを「中断」してから最初のハッシュ部分を抽出できる場合は、ファイルの内容全体を繰り返すことなく、最終的に必要なファイル名を作成できることです.tar.gz

だから私の質問は、コマンド全体が完了するのを待たずに(数分かかります)、最初の出力で「中断」し、結果を把握して最終的に必要なファイル名を取得できるawkどうかです。

編集する:最初の結果以降、単にingを実行しても実行時間が変わらないtarので、実際に中断したいようです。exit

ベストアンサー1

次のことを試してください

 tar tzf "archive.tar.gz" | awk -F/ '$NF ~ /my-filename$/ {print $NF ; exit }'

または

 tar tzf "archive.tar.gz" | awk -F/ 'substr($NF,4,11) == "my-filename" {print $NF ; exit }'

(ここで4と11は実際のファイル名と一致します)。

おすすめ記事