7zでファイル数を取得する方法

7zでファイル数を取得する方法

7zアーカイブルートに含まれるファイルの数(ディレクトリを含む)をインポートしたいのですが、7zLinuxのコマンドは数値をインポートして他のエントリを記録する簡単な方法を提供しません。

たとえば、およびを7zarchive.7z含むファイルがあります。次に、次の詳細行を印刷します。archive.tararchive.gzip7z 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))/'

  1. tail最後の行を抽出します。
  2. 最初のsed式は、「file」と「folder」という単語の前の数字を抽出します。
  3. 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「フォルダ」。正規表現を使用して行を一致させ、より具体的にすることができます。

おすすめ記事