7zアーカイブルートに含まれるファイルの数(ディレクトリを含む)をインポートしたいのですが、7z
Linuxのコマンドは数値をインポートして他のエントリを記録する簡単な方法を提供しません。
たとえば、およびを7zarchive.7z
含むファイルがあります。次に、次の詳細行を印刷します。archive.tar
archive.gzip
7z l 7zarchive.7z
7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=fr_FR.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)
Listing archive: 7zarchive.7z
--
Path = 7zarchive.7z
Type = 7z
Method = LZMA
Solid = +
Blocks = 1
Physical Size = 495
Headers Size = 184
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2016-03-14 22:43:10 ....A 20480 311 archive.tar
2016-03-14 23:04:01 ....A 163 archive.gzip
------------------- ----- ------------ ------------ ------------------------
20643 311 2 files, 0 folders
右下に「ファイル2個、フォルダ0個」が表示されているので、フォルダ数とファイル数の合計を求めたいと思います。
そのために、次のような恐ろしいコマンドを試しました。
bash 7z l 7z l *.7z | tail -1 | sed -e 's/.* \([0-9]*\) files\, \([0-9]*\) folders/\1 \2/' -e 's/\([0-9]*\) \([0-9]*\)/\$(( \1 + \2))/' | tail -1 | sed -e 's/.* \([0-9]*\) files\, \([0-9]*\) folders/\1 \2/' -e 's/\([0-9]*\) \([0-9]*\)/\$(( \1 + \2))/'
tail
最後の行を抽出します。- 最初の
sed
式は、「file」と「folder」という単語の前の数字を抽出します。 - 2番目の
sed
式は、次のように印刷されるようにフォーマットします$(( <first number> + <second number>))
。
だから、出力を得るが$(( 2 + 0))
結果を計算するコマンドではなく、結果(2)だけを得るために実行したいと思います。
もしそうなら、これを行う方法はありますか、それとも少なくとも7zアーカイブに含まれるファイル数を取得するより簡単な方法はありますか?
答え1
たとえば、位置値を使用すると簡単になります。
7z l 7zarchive.7z | tail -n 1 |awk '{ print $3 + $5; }'
合計ファイル + フォルダ数を提供します。
最後の行に
20643 311 2 files, 0 folders
$1
はい「20643「$2
はい「311」、$3
はい「2」、$4
はい「文書、「$5
はい「0」そして$6
「フォルダ」。正規表現を使用して行を一致させ、より具体的にすることができます。
答え2
いよいよ見つけたのに思ったより簡単ですね7z l -slt <nameof archive> | grep -c 'Path = [^/]*$'
。