如何在命令行中快速提取各种存档文件?

很多时候我需要使用命令行来提取不同类型的归档文件。但并不是每次我都记得每种文件归档的确切命令。所以,我不得不浪费时间重新搜索。有什么办法可以避免这种情况吗?

1还可以使用atool,它可以提取/打包多种格式:请参考我对这个问题的回答:命令行存档管理器和提取器。这个问题也是那个问题的重复,所以它们可能应该合并。 - user76204
相关链接:https://unix.stackexchange.com/questions/73359/universal-extractors - Ciro Santilli OurBigBook.com
2个回答

你可以使用以下的shell脚本(我将其命名为extract并放在~/bin目录下):
#!/bin/bash
如果 [ $# -lt 1 ];then echo "用法:`basename $0` 文件" exit 1 fi
# 我在https://unix.stackexchange.com/a/168/37944找到了下面的函数 # 我稍作了改进。非常感谢sydo提供的思路。 extract () { for arg in $@ ; do if [ -f $arg ] ; then case $arg in *.tar.bz2) tar xjf $arg ;; *.tar.gz) tar xzf $arg ;; *.bz2) bunzip2 $arg ;; *.gz) gunzip $arg ;; *.tar) tar xf $arg ;; *.tbz2) tar xjf $arg ;; *.tgz) tar xzf $arg ;; *.zip) unzip $arg ;; *.Z) uncompress $arg ;; *.rar) rar x $arg ;; # 必须安装 'rar' *.jar) jar -xvf $arg ;; # 必须安装 'jdk' *) echo "'$arg'无法通过extract()提取" ;; esac else echo "'$arg'不是有效的文件" fi done }
extract $@
不要忘记将脚本设为可执行:
chmod +x ~/bin/extract

用法:
提取 文件_1 文件_2 ... 文件_n

不错。我发现有时候zip文件解压缩到当前目录,而我希望它在自己的子目录中。使用unzip -d basename $arg可能会有所帮助。 - crafter

dtrx命令在这方面是你的朋友。

它通过猜测文件类型来解压缩任何存档文件。 它还会确保你解压缩的文件被放在一个新目录中,避免将当前工作目录弄得一团糟。

安装

sudo aptitude install dtrx

使用方法

dtrx stuff.zip