하위 디렉터리의 파일을 포함하여 Zip 아카이브의 모든 *.doc 파일을 나열하는 방법은 무엇입니까?

하위 디렉터리의 파일을 포함하여 Zip 아카이브의 모든 *.doc 파일을 나열하는 방법은 무엇입니까?

다음과 같은 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

관련 정보