zipinfo -1 a.zip
zip의 내용을 표시하는 명령을 사용하고 있습니다 . 매번 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
^H
OME
bsdtar
\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을 변수로 바꿀 수 있습니다.