【Linux】使用Bash和GNU Parallel并行解压缩文件

介绍

在本教程中,我们将学习如何使用Bash脚本和GNU Parallel实现高效并行解压缩多个文件。这种方法在处理大量文件时可以显著加快提取过程。

先决条件

确保系统上已安装以下内容:

  • Bash
  • GNU Parallel

你可以使用以下命令在不同Linux系统上安装它们:

在Ubuntu上安装

bash 复制代码
# 安装Bash(通常已经安装)
sudo apt-get update
sudo apt-get install bash

# 安装GNU Parallel
sudo apt-get install parallel

在CentOS上安装

bash 复制代码
# 安装Bash(通常已经安装)
sudo yum install bash

# 安装GNU Parallel
sudo yum install parallel

场景

想象一下,您有一个包含多个ZIP文件的目录,并且希望并行提取它们以节省时间。我们将创建一个Bash脚本,使用GNU Parallel实现此目标。

Bash脚本

让我们逐步分解脚本:

bash 复制代码
#!/bin/bash

# 切换到指定目录,通过命令行参数传递
cd "$1" || exit

# 获取当前目录下所有zip文件
zip_files=$(ls *.zip)

# 定义解压函数
unzip_file() {
  zip_file="$1"
  # 解压zip文件到新创建的目录
  unzip "$zip_file"
}

# 设置并发线程数,可以根据需要调整
num_threads=12

# 导出解压函数,使其可在子shell中调用
export -f unzip_file

# 利用parallel执行解压函数
echo "$zip_files" | parallel -j "$num_threads" unzip_file

解释:

  • 切换目录: 脚本首先通过命令行参数切换到指定目录,这样您就可以选择要处理的目标目录。

  • 列出ZIP文件: 使用ls获取当前目录中所有ZIP文件的列表。

  • 解压函数: 定义unzip_file函数,用于使用unzip命令提取给定的ZIP文件。

  • 设置线程数: 您可以调整num_threads变量以控制并行线程的数量。

  • 导出函数: 使用export -f unzip_file命令导出unzip_file函数,以便在子shell中使用。

  • 并行执行: 最后,使用parallel命令以并行方式对每个ZIP文件执行unzip_file函数。

运行脚本

  1. 将脚本保存为文件,例如parallel_unzip.sh
  2. 使脚本可执行:chmod +x parallel_unzip.sh
  3. 运行脚本:./parallel_unzip.sh <目标目录>

实验

这里,咱们做一个实验,来对比一下并行和不并行的时间。样例输入是一个包含10个压缩包的文件目录,每个压缩包里面都有1000张待解压的图片。实测数据如下:

线程数 运行时间 (s)
10 4.108
5 7.763
2 18.293
1 36.077

结论

通过利用Bash脚本和GNU Parallel,您可以在并行中高效地解压缩多个文件,优化提取过程并节省时间。这种方法在处理大量归档文件时尤为有益。根据您的具体需求自定义脚本,并享受在文件提取任务中并行处理的好处!

相关推荐
何妨呀~3 分钟前
Firewalld防火墙端口配置
linux
切糕师学AI10 分钟前
Vim 深度解析:从经典 vi 到现代编辑器之巅
linux·vim·文本编辑器
计算机安禾34 分钟前
【Linux从入门到精通】第49篇:服务器故障排查终极指南——思路决定出路
linux·运维·服务器
古月-一个C++方向的小白36 分钟前
Linux——初识文件
linux·运维·服务器
北山有鸟1 小时前
编译香橙派内核
linux·运维·服务器
小此方1 小时前
Re:Linux系统篇(八)权限篇 ·三:深度解析从 umask 位运算到粘滞位的“权力锁”
linux·运维·服务器
晨曦夜月1 小时前
进程的五大状态及特殊进程解析
linux·服务器·算法
生而为虫1 小时前
Claude Code 最新版安装教程(Windows/Mac/Linux 全平台) 面向普通用户的 Claude Code 安装与模型接入指南
linux·windows·macos
Sarvartha2 小时前
三目运算符
linux·服务器·前端
vortex52 小时前
Kali Linux 安装与使用 Code-OSS / VSCodium :VSCode 轻量替代
linux·运维·编辑器