그리고-slt

그리고-slt

7z를 사용하여 아카이브 내의 파일 이름을 인쇄하고 싶습니다.

의 출력은 7z l myArchive.7z다음과 같습니다

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz (206A7),ASM,AES-NI)

Scanning the drive for archives:
1 file, 171329 bytes (168 KiB)

Listing archive: myArchive.7z

--
Path = myArchive.7z
Type = 7z
Physical Size = 171329
Headers Size = 237
Method = LZMA2:18
Solid = +
Blocks = 1

  Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2020-06-05 16:03:29 ....A            0            0  file with spaces
2020-06-05 11:53:13 ....A        96616       171092  screen_2020-06-05_11-53-13.png
2020-06-05 11:53:43 ....A       106932               screen_2020-06-05_11-53-43.png
------------------- ----- ------------ ------------  ------------------------
2020-06-05 16:03:29             203548       171092  3 files

7z에서 파일 이름만 인쇄하고 싶습니다.

file with spaces
screen_2020-06-05_11-53-13.png
screen_2020-06-05_11-53-43.png

이를 수행할 수 있는 방법이 있습니까?

답변1

libarchive를 사용하십시오 bsdtar:

bsdtar tf file.7z

또한 7z l아카이브가 암호화된 경우 비밀번호를 입력하라는 메시지가 표시되고 bsdtar오류만 반환됩니다. 이는 스크립트에서 선호되는 방식입니다.

답변2

그리고-slt

이 명령

7z -slt l myArchive.7z | grep -oP "(?<=Path = ).+" | tail -n +2

인쇄

file with spaces
screen_2020-06-05_11-53-13.png
screen_2020-06-05_11-53-43.png

옵션 -slt"[s]는 l(list) 명령에 대한 기술 모드를 설정합니다"에 따라수동.

이 옵션을 사용하면 7z가 아카이브 파일에 대한 정보를 구문 분석 가능한 형식으로 인쇄합니다.

출력은 다음과 같습니다 7z -slt l myArchive.7z.

Listing archive: file with spaces.7z

--
Path = file with spaces.7z
Type = 7z
Physical Size = 171329
Headers Size = 237
Method = LZMA2:18
Solid = +
Blocks = 1

----------
Path = file with spaces
Size = 0
Packed Size = 0
Modified = 2020-06-05 16:03:29
Attributes = A_ -rw-r--r--
CRC = 
Encrypted = -
Method = 
Block = 

Path = screen_2020-06-05_11-53-13.png
Size = 96616
Packed Size = 171092
Modified = 2020-06-05 11:53:13
Attributes = A_ -rw-r--r--
CRC = 41911DBA
Encrypted = -
Method = LZMA2:18
Block = 0

Path = screen_2020-06-05_11-53-43.png
Size = 106932
Packed Size = 
Modified = 2020-06-05 11:53:43
Attributes = A_ -rw-r--r--
CRC = B0ECEA85
Encrypted = -
Method = LZMA2:18
Block = 0

명령의 grep 부분에 대한 | grep -oP "(?<=^Path = ).+"설명이 필요합니다.

  • -o: grep은 전체 줄이 아닌 일치하는 문자열만 인쇄합니다.
  • P: 할 수 있게 하다Perl 호환 정규식grep에서. 정규식에서 뒤돌아보기를 위해 이것이 필요합니다.
  • (?<=^Path = ).+": grep의 정규식입니다. "Path="로 시작하는 줄 뒤의 모든 문자를 가져옵니다. 이 (?<=부분은활성 후면보기즉, 해당 줄은 "Path="로 시작해야 하지만 해당 문자열은 일치 항목의 일부가 아닙니다. 다음 문자는 일치하는 문자열입니다. 이 문자는 파일 이름입니다.

그 다음 첫 번째 줄은 아카이브 이름이고 그 아래에는 모든 파일 이름이 있습니다. 첫 번째 줄을 삭제합니다 | tail -n +2.

관련 정보