菜鸟科技网

extract命令如何使用?

extract 并不是一个标准的、系统自带的命令ls, cp, mv 那样),它通常是一个用户自定义的Shell脚本,目的是为了简化从不同类型的压缩文件中解压内容的过程。

extract命令如何使用?-图1
(图片来源网络,侵删)

没有这个脚本时,我们解压不同格式的文件需要使用不同的命令:

  • .tar 文件: tar -xvf filename.tar
  • .tar.gz.tgz 文件: tar -xzvf filename.tar.gz
  • .tar.bz2 文件: tar -xjvf filename.tar.bz2
  • .tar.xz 文件: tar -xJvf filename.tar.xz
  • .zip 文件: unzip filename.zip
  • .rar 文件: unrar x filename.rar
  • .7z 文件: 7z x filename.7z

这很繁琐,而 extract 脚本的作用就是,你只需要输入 extract filename,它会自动根据文件的后缀名,调用正确的解压命令。


extract 脚本是什么?

它是一个用 Shell(通常是 Bash)编写的脚本,内部使用 case 语句来判断文件的扩展名,并执行相应的解压命令。

如何安装和使用 extract 脚本?

安装和使用非常简单,通常只需要几步。

extract命令如何使用?-图2
(图片来源网络,侵删)

第一步:获取 extract 脚本内容

你可以从网上找到很多版本的 extract 脚本,这里提供一个非常流行和完整的版本,将它保存到一个文件中。

# 创建一个名为 extract 的文件
touch extract
# 用你喜欢的编辑器打开它,nano
nano extract

粘贴到文件中:

#!/bin/bash
# extract - a simple script to extract multiple file types.
# Check if a file was provided as an argument
if [ -z "$1" ]; then
    echo "Usage: extract <filename>"
    echo "Extracts tar, tar.gz, tar.bz2, tar.xz, zip, rar, 7z, and more."
    exit 1
fi
# Check if the file exists
if [ ! -f "$1" ]; then
    echo "Error: File '$1' not found."
    exit 1
fi
# Extract based on file extension
case "$1" in
    *.tar.bz2)   tar xjf "$1"     ;;
    *.tar.gz)    tar xzf "$1"     ;;
    *.tar.xz)    tar xJf "$1"     ;;
    *.tar)       tar xf "$1"      ;;
    *.tbz2)      tar xjf "$1"     ;;
    *.tgz)       tar xzf "$1"     ;;
    *.bz2)       bunzip2 "$1"     ;;
    *.rar)       unrar x "$1"     ;;
    *.gz)        gunzip "$1"      ;;
    *.zip)       unzip "$1"       ;;
    *.Z)         uncompress "$1"   ;;
    *.7z)        7z x "$1"        ;;
    *.deb)       ar x "$1"        ;;
    *)           echo "Error: '$1' cannot be extracted with extract."
                echo "Supported formats: tar.bz2, tar.gz, tar.xz, tar, tbz2, tgz, bz2, rar, gz, zip, Z, 7z, deb."
                exit 1 ;;
esac
echo "Extraction of '$1' complete."

第二步:赋予执行权限

为了让这个脚本可以像命令一样运行,你需要给它添加可执行权限。

chmod +x extract

第三步:将脚本移动到系统 PATH

为了让你在任何目录下都能直接使用 extract 命令,需要把这个脚本放到一个系统 PATH 环境变量包含的目录中。~/bin(用户主目录下的 bin 目录)是最佳选择,因为它不需要 sudo 权限。

extract命令如何使用?-图3
(图片来源网络,侵删)
  1. 创建 ~/bin 目录(如果不存在)
    mkdir -p ~/bin
  2. 移动脚本到 ~/bin
    mv extract ~/bin/
  3. 确保 ~/bin 在你的 PATH 大多数现代 Linux 发行版(如 Ubuntu, macOS)会自动将 ~/bin 添加到 PATH,你可以通过以下命令检查:
    echo $PATH

    如果输出中包含了 /home/你的用户名/bin(或 ~/bin 的绝对路径),那就没问题了,如果没有,你需要将下面这行代码添加到你的 Shell 配置文件中(如 ~/.bashrc, ~/.zshrc 等):

    export PATH="$HOME/bin:$PATH"

    添加后,运行 source ~/.bashrc (或 source ~/.zshrc) 使其生效。

第四步:使用 extract 命令

你可以在任何地方使用 extract 命令了!

# 假设你有一个名为 my_project.tar.gz 的压缩包
extract my_project.tar.gz
# 它会自动识别并执行 tar -xzf my_project.tar.gz

extract 脚本的工作原理(代码解析)

让我们分解一下上面那个脚本的核心部分:

#!/bin/bash
...
# "$1" 是你通过命令行传递给脚本的第一个参数,也就是文件名
case "$1" in
    # 如果文件名以 .tar.bz2 
    *.tar.bz2)   tar xjf "$1"     ;;
    # 如果文件名以 .tar.gz 
    *.tar.gz)    tar xzf "$1"     ;;
    # ... 其他格式匹配
    *)           echo "Error: '$1' cannot be extracted with extract."
                exit 1 ;;
esac
  • #!/bin/bash: 这是 "Shebang",告诉系统这个脚本应该用 Bash 解释器来执行。
  • if [ -z "$1" ]: 检查第一个参数 "$1" 是否为空,如果是,就显示用法提示并退出。
  • if [ ! -f "$1" ]: 检查第一个参数指向的文件是否存在,如果不存在,就报错并退出。
  • case "$1" in ... esac: 这是核心的 case 语句,它会检查变量 "$1"(即你的文件名)的值。
  • *.tar.bz2) tar xjf "$1" ;;: 这是 case 的一个分支。
    • *.tar.bz2) 是一个模式匹配,意思是“以字符串 .tar.bz2
    • tar xjf "$1" 是要执行的命令。x 代表 extract(解压),j 代表处理 bzip2 格式,f 代表指定文件名("$1")。
    • 表示 case 分支的结束。
  • 这是一个通配符,代表所有前面没有匹配到的情况,如果文件后缀不在脚本的支持列表中,就会执行这里的代码,打印错误信息并退出。

其他相关工具

除了自己写 extract 脚本,还有一些现成的工具可以实现类似甚至更强大的功能。

a. atool

atool 是一个专门用于处理归档文件的工具,集成了创建、列表和提取功能,功能比简单的 extract 脚本更丰富。

安装:

# Debian/Ubuntu
sudo apt-get install atool
# Fedora/CentOS
sudo dnf install atool

使用:

# 提取文件 (会自动识别格式)
aunpack my_archive.zip
# 列出归档内容
als my_archive.tar.gz
# 创建归档
apack my_archive.zip file1.txt file2.txt

b. dtrx

dtrx (Do The Right eXtraction) 是一个非常智能的提取工具,它不仅能自动识别格式,还能处理嵌套的压缩包(一个 .tar.gz 文件里面又有一个 .zip 文件),并且会自动创建与文件同名的目录来存放解压内容,避免当前目录变得杂乱。

安装:

# Debian/Ubuntu
sudo apt-get install dtrx
# Fedora/CentOS
sudo dnf install dtrx

使用:

# 提取文件,非常简单!
dtrx my_complex_archive.tar.gz
方法 优点 缺点 适合人群
自定义 extract 脚本 - 轻量级,无依赖
- 完全自定义,可扩展
- 需要自己创建和维护
- 功能相对简单
喜欢DIY、追求极简环境的用户
atool - 功能全面(增删查改)
- 命令统一,易记
- 需要额外安装一个包 需要一个简单归档管理工具的用户
dtrx - 极其智能,能处理复杂情况
- 自动创建目录,干净整洁
- 命令极其简单
- 需要额外安装一个包 所有用户,特别是经常处理各种压缩包的用户

对于大多数用户来说,强烈推荐直接使用 dtrx,因为它能解决你几乎所有关于解压的烦恼,如果你只是想体验一下 Shell 脚本的乐趣,或者不想安装新软件,那么自己写一个 extract 脚本也是非常好的实践。

分享:
扫描分享到社交APP
上一篇
下一篇