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" 단어 앞의 숫자를 추출합니다. - 두 번째
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 = [^/]*$'
.