サブディレクトリのファイルを含む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

再起動するたびに1回(削除するには~/.avfs実行fusermount -u ~/.avfs

その後、通常のコマンドが機能します。

cd ~/.avfs$PWD
find zip.zip\# -name '*.doc'

または

ls ~/.avfs$PWD/zip.zip\#/**/*.doc

関連情報