通用提取器


19

随着存档/压缩文件格式数量增加,是否有一个免费的/开源命令行工具可以将它们全部统治?也许带有一致/统一标志集的东西?(请注意我对tar的友好隐式引用

我曾经遇到过一组别名,这些别名旨在大大简化通过与tarutils和其他utils的绑定来压缩/解压缩文件的任务,但是我再也找不到了。

更新: 我该如何配置一些类似的功能atool,例如不unzip提取zip文件(显然无法处理大于4GB的文件)并改为使用gunzip

$ aunpack large_file.zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.zip
warning [large_file.zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code

1
另一个解决方案:packages.qa.debian.org/u/unp.html
frostschutz

@frostschutz。您是否知道有什么unpack不同之处atool
Amelio Vazquez-Reina

不知道。正如埃文(Evan)的回答所示,这样的程序相当简单。使用对您有用的任何东西。对于解压缩zip文件,我的个人偏好是7z
frostschutz

1
@ user815423426我已经在现有答案中添加了有关更新问题的说明。
SuperMagic

Answers:


18

我使用atool。它完成了工作。尽管不是所有格式,它都可以使用:

tar,gzip,bzip2,bzip,lzip,lzop,lzma,zip,rar,lha,arj,arc,p7zip等

尽管压缩工具只是它们的前端,但仍然需要这些压缩工具。

我特别喜欢als它提供的命令,该命令列出了所有受支持的存档格式的内容。

main atool命令使用其自己的标志来提取档案(将适当的标志传递给特定的基础提取工具)。

哦,它在某些发行版的存储库中(就我而言,Fedora,虽然我记得,当我使用Ubuntu时,它不在他们的存储库中,而是从tarball安装)。

存储库更新:atool在以下发行版的存储库中(仅检查当前发行版):

  • 软呢帽
  • Debian(感谢@terdon,并且大概是Ubuntu之类的衍生产品)
  • Ubuntu(qed,以及类似Mint的衍生产品)
  • 开放式
  • CentOS(大概是RHEL)
  • Arch Linux

我敢肯定还有其他...可能是大多数现代发行版。

回答最新问题的答案:“如何配置atool之类的工具,不使用unzip提取zip文件...而使用gunzip代替”

编辑atool配置文件~/.atoolrc并添加以下行:

path_unzip /usr/bin/gunzip

使用正确的gunzip程序路径。

有关可放入此配置文件中的可能变量的完整列表,请参见手册页,其中有很多。如果gunzip所需的命令行选项与unzip不同,则可能必须修改atool源(perl)本身。


谢谢。这看起来很棒。您是否知道,除了能够下载tarball之外,是否还有一个(git / bzr)存储库,或者它的一个分支?
2013年

似乎没有git repo。有一个颤抖的CVS回购:savannah.nongnu.org/cvs/ ? group= atool。但是,源代码在压缩包中,并且该工具是用perl编写的,因此,您或任何有强烈需求的人都可以轻松修改。
SuperMagic

1
@ user815423426它也在Debian仓库中。
terdon

9

这是一个小shell函数,可以处理几种存档类型。

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

我在网上某个地方找到了该功能的原始版本,并对其进行了一些修改以提取ar档案和xz压缩tar档案。


这看起来很棒。这是bash吗?
Amelio Vazquez-Reina

我仅使用bash和进行过测试zsh,但也可以使用sh

对于外壳功能,这在美学上非常令人愉悦。一个警告是,您要确保已安装所有相关的二进制文件,或者删除那些未安装的行。
bgvaughan

3

动静脉瘘文件系统呈现文件系统的观点,每一个存档文件(例如/path/to/foo.zip)是目录进行访问(~/.avfs/path/to/foo/zip#在这个例子中)。AVFS提供对大多数常用归档文件格式的只读访问。

mountavfs
cp -Rp ~/.avfs$PWD/large_file.zip\# extraction_directory

Avfs使用外部帮助程序,可以通过在其中编辑文件轻松地对其进行配置/usr(不幸的是,从avfs 1.0开始,无法使用/usr/local主目录中或主目录中的文件,您需要在其中编辑文件/usr或重新编译文件)。/usr/share/avfs/extfs/ext-uzip是用于处理.zip文件的脚本,如果您不想使用,请对其进行更改/usr/bin/unzip。您也许可以改用7z:尝试编辑/usr/share/avfs/extfs/extfs.ini并将行更改ext-uzipu7z .zip

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.