将存档解压到单个文件夹

将存档解压到单个文件夹

也许这是第一世界问题的顶峰,但经过多年的焦虑,我不得不将其公开。

假设您已将其下载到文件夹funtool.zip~/Downloads。您有两种选择,每种选择都有两种可能的结果,具体取决于存档是否具有正确的根文件夹。

unzip funtool。可能的结果:

  • ~/Downloads/funtool/(files)- 好的
  • ~/Downloads/(lots of files)——啊啊!下载文件夹乱七八糟

unzip funtool -d funtool。可能的结果:

  • ~/Downloads/funtool/funtool/(files)-- 双文件夹。恼人的!
  • ~/Downloads/funtool/(files)- 好的

我见过一些 GUI 解压缩器具有内置的智能功能,但我是 CLI 人员。我的解决方案是检查根文件夹unzip -t funtool并采取相应措施。但多年后,我已经受够了。

是否有脚本或其他东西可以自动执行此操作,即使对于rar文件也是如此7z?至少这似乎是一件tar每次都正确的事情,也许是因为良好的惯例。

答案1

作为各种存档格式的 CLI 前端,有unp用一个命令解压(几乎)所有内容

它声称有以下选项:

   -u Special helper mode.
      For most archive types:
      - create directory <filename without suffix>/
      - extract contents there
      For Debian/Ubuntu packages:
      - extract data.tar.gz after each operation in local directory
      - extract control.tar.gz into control/<package_version_arch>/
   -U Smart mode, acts like -u (see above) if archive contains multiple
      elements but if there is only one file/directory element then it's stored 
      in the current directory.

然后声音就像它接近您正在寻找的行为一样。

-U然而,如果它是一个包含与 zip 文件本身的名称没有任何关系的单个文件的 ZIP,该模式仍然会丢弃单个文件。

答案2

7z可以做到这一点,至少如果存档中的根目录(如果有)与您要提取到的目录的名称匹配:

7z x -spe funtool.zip -ofuntool

如果funtool.zip的内容全部位于funtool存档中的某个目录内,7z则不会复制下面的目录funtool,从而为您提供所需的结果。

答案3

有命令行工具德特克斯,它能够提取任何类型的压缩文件。默认情况下,所有内容都将写入以存档命名的专用目录中。

只需运行

dtrx <archive_name>

如果您有基于 Debian 的发行版,您可以在 APT 存储库中找到它。

相关内容