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

Bry*_*mas 8 linux zip command-line

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

$ tree A
A
??? inner_dir
    ??? file1.txt
    ??? file2.txt

1 directory, 2 files
Run Code Online (Sandbox Code Playgroud)

现在假设你得到了两个 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
Run Code Online (Sandbox Code Playgroud)

什么命令我可以用它来编程重构最初的解压目录A从组合1.zip2.zip

上下文:当从 Google Drive 导出一个大目录时,内容被分成一组 2 个或更多的 zip 文件。每个 zip 文件都包含文件的一些子集,这些子集合并后会重新构成原始目录。哪些文件包含在哪些 zip 中似乎或多或少是随机的。我正在寻找一种可以推广到 n > 1 个 zip 文件的解决方案,而不仅仅是 2 个文件的特殊情况。

Bry*_*mas 9

将要解压缩的文件集移动到专用目录,然后使用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.
Run Code Online (Sandbox Code Playgroud)

查看:

$ tree combined
combined
??? A
    ??? inner_dir
        ??? file1.txt
        ??? file2.txt

2 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

  • 在找到这个“明显”的解决方案之前,我经历了很多挣扎。这是显而易见的,因为一旦“unzip”创建了一个文件夹,在提取下一个存档时就不会重新创建它。这样做,提取是增量的。谢谢 (2认同)