ファイルのディレクトリ階層を含む 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」ファイルすべてを抽出します。
この Linux コマンドを変更して、ディレクトリ パスのどこかに文字列「acme」が含まれる 3 つの「txt」ファイルのみを抽出するようにするにはどうすればよいでしょうか (つまり、2.txt、3.txt、4.txt のみを抽出するようにするには)?
答え1
あなたの例は、作業ディレクトリにファイルunzip foo.zip *.txt
がなかったためにのみ機能しました。そうでなければ 、シェルによってディレクトリ内のテキスト ファイルの名前に展開されます。安全のために引用符で囲む必要があります。*.txt
*.txt
はunzip
グロブを使用するので、
unzip foo.zip '*acme*/*.txt'
あるいは
unzip foo.zip '*acme*.txt'
元のディレクトリ構造を復元せず、現在の作業ディレクトリにファイルを抽出したい場合は、オプションを追加します-j
。
unzip -j foo.zip '*acme*/*.txt'