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」ファイルをすべて抽出します。

ディレクトリパスのどこかに「acme」文字列を含む3つの「txt」ファイルのみを抽出するように(したがって2.txt、3.txt、および4.txtのみを抽出するように)、このLinuxコマンドを変更するにはどうすればよいですか?

ベストアンサー1

unzip foo.zip *.txtあなたの例は、作業ディレクトリにファイルがないために機能します。*.txtそれ以外の場合、*.txt シェルはディレクトリのテキストファイル名に展開されます。安全な方になるためには引用が必要です。

unzipglobを使うので

unzip foo.zip '*acme*/*.txt'

でも

unzip foo.zip '*acme*.txt'

元のディレクトリ構造を復元し、ファイルを現在の作業ディレクトリに抽出したくない場合は、次のオプションを追加します-j

unzip -j foo.zip '*acme*/*.txt'

おすすめ記事