如何将多个 zip 文件解压到单个目录结构中(例如 Google Drive 文件夹导出)

如何将多个 zip 文件解压到单个目录结构中(例如 Google Drive 文件夹导出)

假设您从一个未压缩的目录开始A,其结构如下:

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

1 directory, 2 files

现在假设您已获得两个 zip 文件1.zip,并且2.zip派生自A1.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.zip2.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。

相关内容