zip アーカイブの各メンバーから最初の N 行を読み込みます。

zip アーカイブの各メンバーから最初の N 行を読み込みます。

Ten.zipで圧縮された10個のファイルがあります。圧縮ファイルの10個のファイル全体で最初のn行(2行など)を読み取る方法は?簡単なコマンドがありますか?

ベストアンサー1

unzip自体はこの機能を提供しないため、「簡単な」コマンドはありません。ファイルの一部または全部を抽出し、それ自体を処理するように要求する必要があります。別のアプローチは次のとおりです。

zipinfo -1 Ten.zip | while IFS= read -r filename
do 
  unzip -p Ten.zip "$filename" | sed 2q
done

ここでの違いは、zipinfoアーカイブの内容を1行に1つずつ一覧表示するために使用することです。次に、ファイル名を1行ずつ読み、ファイルを画面に抽出するように求めますunzip-pいいえprint)その後、sedパイプ(デフォルト)を介して印刷され、ライン2で終了します。

アーカイブするファイル名に改行文字が含まれていると、この操作が失敗する可能性があります。ただし、解凍すると抽出時にファイル名が破損するため、これを行わないでください。

$ touch file$'\n'name
$ zip foo.zip file*name
$ rm file*name
$ zipinfo -1 foo.zip
file^Jname
$ unzip foo.zip
Archive:  foo.zip
 extracting: filename
$ ls -lrt
...
filename

おすすめ記事