다음과 같은 Zip 파일이 있습니다.
$ zipinfo -1 zip.zip
doc.doc
dotx.dotx
xls.xls
ppt.ppt
txt.txt
c.c
subdir/subdir2/doc.doc
subdir/xls.xls
subdir/ppt.ppt
subdir/c.c
subdir/txt.txt
subdir/subdir2/
subdir/
zipinfo -1 zip.zip *.doc
모든 *.doc 파일을 인쇄하고 Zip 파일의 루트에 있는 .doc 파일만 인쇄하고 싶습니다 . 모든 하위 디렉터리의 모든 .doc 파일을 인쇄하는 방법은 무엇입니까?
답변1
zipinfo -1 zip.zip '*.doc'
나를 위해 일했으며 하위 디렉토리의 모든 파일을 표시합니다. 내 생각엔 당신이 그 주위의 따옴표를 잊어버린 것 같아요 *.doc
. 따옴표가 없으면 현재 디렉터리의 모든 파일 *.doc
로 확장된 다음 검색 패턴으로 zipinfo에 전달됩니다. .doc
따라서 압축이 풀린 버전의 아카이브가 로컬 디렉터리에 있는 경우 명령은 최상위 .doc
파일만 표시합니다.
따옴표를 사용하면 매개변수가 셸에서 보호되므로 와일드카드를 실제로 zipinfo
성공적으로 구현할 수 있습니다.
답변2
다음을 시도해 볼 수 있습니다.
zipinfo -1 zip.zip | grep '\(/\|^\)*.\.doc$'
답변3
아카이브를 디렉터리로 마운트하면 파일이 아카이브 내부에 있는지 걱정하지 않고 일반 명령을 사용할 수 있습니다.
이것AVFS/path/to/foo.zip
파일 시스템은 각 아카이브 파일이 디렉터리로 액세스할 수 있는 파일 시스템 보기를 제공합니다 ~/.avfs/path/to/foo.zip#
. AVFS는 가장 일반적인 아카이브 파일 형식에 대한 읽기 전용 액세스를 제공합니다. 명령 실행
mountavfs
재부팅할 때마다 한 번씩( 제거하려면 ~/.avfs
실행 fusermount -u ~/.avfs
)
그 후에는 일반적인 명령이 작동합니다.
cd ~/.avfs$PWD
find zip.zip\# -name '*.doc'
또는
ls ~/.avfs$PWD/zip.zip\#/**/*.doc