複数の zip ファイルを単一のディレクトリ構造に解凍する方法 (例: Google ドライブ フォルダのエクスポート)

複数の zip ファイルを単一のディレクトリ構造に解凍する方法 (例: Google ドライブ フォルダのエクスポート)

A次のような構造を持つ、圧縮されていないディレクトリから開始したと仮定します。

$ tree A
A
└── inner_dir
    ├── file1.txt
    └── file2.txt

1 directory, 2 files

ここで、 2 つの zip ファイルが提供され1.zip2.zipから派生したものと仮定しますA1.zipには のみが含まれfile1.txt2.zipには のみが含まれますfile2.txt

# -l flag simply lists file contents

$ unzip -l 1.zip 
Archive:  1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-09-30 21:49   A/
        0  2017-09-30 22:27   A/inner_dir/
        0  2017-09-30 21:49   A/inner_dir/file1.txt
---------                     -------
        0                     3 files

$ unzip -l 2.zip 
Archive:  2.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-09-30 21:49   A/
        0  2017-09-30 22:27   A/inner_dir/
        0  2017-09-30 22:27   A/inner_dir/file2.txt
---------                     -------
        0                     3 files

Aの組み合わせから元の解凍されたディレクトリをプログラムで再構成するには、どのコマンドを使用できますか?1.zip2.zip

コンテクスト:Google ドライブから大きなディレクトリをエクスポートすると、その内容は 2 つ以上の zip ファイルのセットに分割されます。各 zip ファイルにはファイルのサブセットが含まれており、これらをまとめて元のディレクトリを再構成します。どのファイルがどの zip ファイルに含まれているかは、多かれ少なかれランダムであるように見えます。ちょうど 2 つのファイルという特殊なケースだけでなく、n > 1 の zip ファイルに一般化できるソリューションを探しています。

答え1

解凍するファイルセットを専用のディレクトリに移動し、次を使用しますunzip

$ unzip '*.zip' -d combined

Archive:  1.zip
   creating: combined/A/
   creating: combined/A/inner_dir/
 extracting: combined/A/inner_dir/file1.txt  

Archive:  2.zip
 extracting: combined/A/inner_dir/file2.txt  

2 archives were successfully processed.

チェック:

$ tree combined
combined
└── A
    └── inner_dir
        ├── file1.txt
        └── file2.txt

2 directories, 2 files

答え2

@lcharbon あなたの問題は、zip が非標準のエンコードを処理する方法にあります。

これをより適切に処理する p7zip を使用することで解決できます。

p7zip を使用した analog コマンドは次のとおりです。

7z x '*.zip' -ocombined

Mac では brew を使用しbrew install p7zip、Linux ではディストリビューションのパッケージ マネージャーを使用して p7zip をインストールできます。

関連情報