zip 이름과 파일 이름 인쇄

zip 이름과 파일 이름 인쇄

zipinfo -1 a.zipzip의 내용을 표시하는 명령을 사용하고 있습니다 . 매번 zip 이름과 크기 파일 이름을 나란히 표시하는 방법.

예를 들어 다음과 같은 두 개의 zip이 있습니다.

a.zip contains file1, file2, file3, file4
b.zip contains file5, file6, file7, file8

원하는 출력:

a.zip file1
a.zip file2
a.zip file3
a.zip file4
b.zip file5
b.zip file6
b.zip file7
b.zip file8

답변1

다음과 같이 할 수 있습니다:

for file in *.zip; do
  bsdtar -tf "$file" | F=$file awk '{print ENVIRON["F"], $0}'
done

zip 파일 이름에 와일드카드가 포함되어 있고 해당 제어 문자의 인코딩이 모호한 경우(예: 줄이 보이고 그것이 리터럴인지 (백스페이스 키의 표현)인지 알 수 없는 경우) 여기서 as 문자 bsdtar대신 사용하면 됩니다. zipinfo제대로 작동하지 않습니다 ) 다음에). 표현을 사용하면 백슬래시 자체가 로 나타납니다.zipinfo^HOME^HOME^HOMEbsdtar\b\\

GNU에서는 대신 접두사로 using을 사용할 grep수 있습니다 . 당신은 또한 볼 수 있습니다 . 하다filename:grep -H --label="$file" '^'perl -nse 'print "$file $_"' -- -file="$file"아니요sed "s/^/$file /"이는 명령 주입 취약점이기 때문에 사용됩니다 .

답변2

단일 zip 파일의 경우 예를 들면 다음과 같습니다.

unzip -l a.zip | awk 'NR==1{a=$2}; (NR>3 && NF==4){print a, $NF}'

그 정도면 충분합니다. 여러 파일을 더 쉽게 처리하려면 명령을 함수에 넣고 a.zip을 변수로 바꿀 수 있습니다.

관련 정보