7zアーカイブのルートに含まれるファイル(含まれるディレクトリ)の数を取得したいのですが、Linuxの_7z
_コマンドでは、数を取得するだけの簡単な方法はありません。
たとえば、_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
式は、「files」および「folders」という単語の前の数値を抽出します。sed
式は、この$(( <first number> + <second number>))
のように出力されるようにフォーマットします。したがって、実際には出力$(( 2 + 0))
を取得しますが、結果を計算するコマンドではなく、結果(2)のみを取得するように実行する必要があります。
それで、これを行う方法がありますか、またはリストで、7zアーカイブに含まれるファイルの数を取得するためのより簡単な方法がありますか?
私はついにそれを見つけました、私が想像するより簡単でした:7z l -slt <nameof archive> | grep -c 'Path = [^/]*$'
。
位置の値を使用すると、より簡単になります。たとえば、
7z l 7zarchive.7z | tail -n 1 |awk '{ print $3 + $5; }'
ファイルとフォルダの合計を表示します。
最後の行で
20643 311 2 files, 0 folders
$1
is "2064"、$2
is "311"、$3
is "2"、$4
is "files、"、$5
is "0" and $6
is "folders"。正規表現を使用して行に一致させることで、より明確にすることができます。