A
次のような構造を持つ、圧縮されていないディレクトリから開始したと仮定します。
$ tree A
A
└── inner_dir
├── file1.txt
└── file2.txt
1 directory, 2 files
ここで、 2 つの zip ファイルが提供され1.zip
、2.zip
から派生したものと仮定しますA
。 1.zip
には のみが含まれfile1.txt
、2.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.zip
2.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 をインストールできます。