ファイルのディレクトリ階層を含むzipアーカイブがあります。 Linux unzipコマンドを使用してファイルを指すディレクトリパスのどこかに特定の文字列を持つこれらのファイルのサブセットを抽出したいと思います。
たとえば、foo.zip ファイルに次のファイルが含まれているとします。
a/1.txt
acme/2.txt
a/acme/b/3.txt
a/b/acmenet/c/4.txt
a/b/c/5.txt
a/acme/d/6.php
Linuxコマンド「unzip foo.zip *.txt」は、5つの「txt」ファイルをすべて抽出します。
ディレクトリパスのどこかに「acme」文字列を含む3つの「txt」ファイルのみを抽出するように(したがって2.txt、3.txt、および4.txtのみを抽出するように)、このLinuxコマンドを変更するにはどうすればよいですか?
答え1
unzip foo.zip *.txt
あなたの例は、作業ディレクトリにファイルがないために機能します。*.txt
それ以外の場合、*.txt
シェルはディレクトリのテキストファイル名に展開されます。安全な方になるためには引用が必要です。
unzip
globを使うので
unzip foo.zip '*acme*/*.txt'
でも
unzip foo.zip '*acme*.txt'
元のディレクトリ構造を復元し、ファイルを現在の作業ディレクトリに抽出したくない場合は、次のオプションを追加します-j
。
unzip -j foo.zip '*acme*/*.txt'