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

答え2

使用unzipgrep:

(注:この回答は@RomanPerekhrestの回答を参照しています。ここに投稿があります。)

bash-3.2$ unzip -l ten.zip
Archive:  ten.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        6  02-07-2018 09:16   0.txt
        6  02-07-2018 09:16   1.txt
        6  02-07-2018 09:16   2.txt
        6  02-07-2018 09:16   3.txt
        6  02-07-2018 09:16   4.txt
        6  02-07-2018 09:16   5.txt
        6  02-07-2018 09:16   6.txt
        6  02-07-2018 09:16   7.txt
        6  02-07-2018 09:16   8.txt
        6  02-07-2018 09:16   9.txt
---------                     -------
       60                     10 files
bash-3.2$

圧縮ファイルの内容をstdout / screenに抽出します。

bash-3.2$ unzip -c ten.zip | grep -A2 extracting
 extracting: 0.txt
0
0
--
 extracting: 1.txt
1
1
--
 extracting: 2.txt
2
2
--
 extracting: 3.txt
3
3
And so on..

注文するunzip -c ten.zip | grep -A[n] extracting。ここで、「n」は、ユーザが見たい行数であってもよい。

答え3

unzip+awk解決策:

10xml.zipファイル構造の例:

$ unzip -l 10xml.zip 
Archive:  10xml.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       20  2018-02-07 11:20   home/osboxes/temp_files/1.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/2.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/3.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/4.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/5.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/6.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/7.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/8.xml
       20  2018-02-07 11:20   home/osboxes/temp_files/9.xml
       21  2018-02-07 11:20   home/osboxes/temp_files/10.xml
---------                     -------
      201                     10 files

  • unzip -l <archive>- アーカイブファイルリスト(短い形式)

アーカイブの各ファイルから最初の2行を抽出します。

unzip -c 10xml.zip | awk -v n=2 'NR==1{ next }/^ +inflating:/{ n=NR+2; next }n && NR<=n'
  • unzip -c <archive>- stdout / screenでファイルを抽出します。抽出中に各ファイルの名前が印刷されます。

関連情報