複数のディレクトリから同じ名前のファイルを抽出する

複数のディレクトリから同じ名前のファイルを抽出する

私のファイルは、archive.zip次のようないくつかのディレクトリにあります。

dir/001/archive.zip
dir/002/archive.zip
dir/003/archive.zip
...

archive.zipコマンドラインを使用して、異なる名前のすべてのディレクトリ内のすべてのファイルを再帰的に解凍する方法はありますか? ZIPファイルの内容は、ZIPファイルと同じディレクトリに抽出する必要があります。

フォルダdirは共通で、archive.zip親フォルダの名前だけが異なります。

よろしくお願いします!

答え1

これは職業のようですfind。ディレクトリに変更しdir、次のコマンドを実行します。

find . -type f -name "archive.zip" -execdir unzip {} \;
  • これにより、名前が()のファイルに対して現在(、あなたの場合と.同じ)で始まるすべてのディレクトリが検索されます。dir-type farchive.zip
  • unzip {}見つかったら、ファイル-execdirは見つかったディレクトリ()でコマンドを実行し、見つかった{}ファイルの名前を引用します(findこの場合は実際のファイル名に置き換えられますarchive.zip)。

と言うのと同じ効果があります。cd 001/; unzip archive.zip; cd ..; cd 002/; unzip archive.zip(私の考えでは、あなたがアイデアを得たようです。)

ノート実行するコマンドは;実際にエスケープする必要があります\。それ以外の場合、シェルはコマンドに到達する前にそれを解釈しますfind

また、dir/ディレクトリ自体archive.zip抽出したくない、下の最初のサブディレクトリレベルで始まるファイルのみを考慮したい場合は、-mindepth 1開始点の後に引数を追加する必要があります。.finddir/

関連情報