次の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