假设您从一个未压缩的目录开始A
,其结构如下:
$ tree A
A
└── inner_dir
├── file1.txt
└── file2.txt
1 directory, 2 files
现在假设您已获得两个 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 Drive 导出大型目录时,内容会分散到一组 2 个或更多 zip 文件中。每个 zip 文件包含一些文件子集,当这些文件组合在一起时,它们会重新构成原始目录。哪些文件包含在哪个 zip 中似乎或多或少是随机的。我正在寻找一种解决方案,可以推广到 n > 1 个 zip 文件,而不仅仅是恰好 2 个文件的特殊情况。
答案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 的模拟命令:
7z x '*.zip' -ocombined
您可以使用 brewbrew install p7zip
或 Linux 上发行版的包管理器在 Mac 上安装 p7zip。