也许这是第一世界问题的顶峰,但经过多年的焦虑,我不得不将其公开。
假设您已将其下载到文件夹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 存储库中找到它。