如何获取 7z 中的文件数量

如何获取 7z 中的文件数量

我想获取 7z 存档根目录中包含的文件(包括目录)的数量,但7zLinux 上的命令并没有提供一种简单的方法来仅获取数量并记录其他内容。

例如,我有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))/'

  1. tail提取最后一行;
  2. 第一个sed表达式提取单词“文件”和“文件夹”之前的数字。
  3. 第二个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 = [^/]*$'

相关内容