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
使用unzip
とgrep
:
(注:この回答は@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でファイルを抽出します。抽出中に各ファイルの名前が印刷されます。