私は同様の投稿から取得し、次のスニペットを使用しています。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は実際のファイル名と一致します)。