複数のzipファイルから1つのファイルを抽出します。

複数のzipファイルから1つのファイルを抽出します。

それぞれ4つのファイルを含む複数の.zipフォルダ(約600)を含むフォルダツリーがあります。各フォルダからファイルを抽出して別のフォルダにコピーしたいと思います。状況を複雑にするために、各フォルダのファイル名は同じです。これを行うために実行できるスクリプトはありますか?助けてくれてありがとう。

答え1

次のことを試すことができます。

mkdir -p "DESTDIR"
for i in *.zip ; do
         unzip "$i" "THEFILE" -d "DESTDIR"
         mv "DESTDIR/THEFILE" "DESTDIR/$(basename "$i" .zip)_THEFILE"
done

DESTDIR宛先パスに置き換えます。THEFILE抽出したい各.zipファイルのファイル名に置き換えます。 zipファイルのファイル名によってファイル名が変更されます。

答え2

情報圧縮プログラムunzipが認識できるグローバルモードファイル名に。したがって、zipファイルにfile1.gz異なるフォルダに呼び出された多くのファイルが含まれている場合:

$ unzip FolderName.zip '*/file1.gz'
Archive:  FolderName.zip
 extracting: FolderName/b/c/file1.gz          
 extracting: FolderName/b/e/file1.gz          
 extracting: FolderName/b/f/file1.gz 

FolderName.zipthingsというファイルも含まれていますが、その他比較するfile1.gz。目的のファイルをglobパターンと一致させることができればunzip抽出できます。

他のコメントを見ると、抽出されたファイルをすべてリンクする必要があるという印象を受けました。出力を含む最上位フォルダーのunzip名前が指定され、ターゲットFolderNameファイル(file1.gz)がすべてのサブフォルダーの同じフォルダー深さにあると仮定すると、次のように目的の操作が実行されます。

$ gzcat FolderName/*/*/file1.gz > one-big-uncompressed-log-file

つまり、2つのサブフォルダーレベルをスキップしてfile1.gzファイルを抽出してから解凍し、サポートされているほとんどの場所で見つけることができるgzcat汎用プログラムに関連付けます。gzip

関連情報