複数のzipファイルから特定のファイルを解凍する

複数のzipファイルから特定のファイルを解凍する

私はUnixに初めてアクセスし、いくつかのzipファイルから特定のパターンファイル名を抽出しようとしています。私はfindzipファイルを見つけて、zipファイルにあるCTLというファイルを抽出しようとしましたa*b*zip

$ unzip -jn 'find $source_dir -mtime -$st_d -daystart -iname "a*zip"' \
    *CTL* -d $target_dir`

これに加えて、以下を試してみました。

$ find -type f -newermt $start_date \! -newermt $end_date -name "a*zip" \
    | while read filename; do unzip -d $target_dir; done;`

しかし、これはすべてのファイルを抽出するものですが、ファイル名を持つファイルだけを探しています。CTL

答え1

単独で使用すると、簡単にfind -execこれを行うことができます。

find . -type f -name '*.zip' -exec unzip {}  '*CTL*' -d "$target_dir" \;

説明する: -exec{}代替ファイル名が見つかった各ファイルに対して、次のコマンドが実行されます。コマンドはで終了する必要があります;。シェルが独自のforの終了として解釈されるのを防ぐには、最後に\;( '; 'エスケープ)を使用して代わりにプレーンテキストとして渡します。\;findfind

'*CTL*'また、ファイルパターンが引数として渡されるときは、ファイルパターンを引用符で囲むのが最善です*CTL*。これにより、シェルがファイル名を拡張する必要がなくなります。たとえば、この場合、zipファイルabcCTL.zipの1つのファイル名にCTL(たとえば)が含まれているとします。*CTL*パターンだけを使用すると、シェルはパターンを拡張してパターンを渡すのではなくunzipファイル名を渡しますが、abcCTL.zipこれは明らかに望ましくありません。

関連情報