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. 두 번째 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 = [^/]*$'.

관련 정보