Linuxのunzipコマンドを、名前に指定した文字列を含むディレクトリからファイルを抽出するようにする

Linuxのunzipコマンドを、名前に指定した文字列を含むディレクトリからファイルを抽出するようにする

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

関連情報