【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,您可以在并行中高效地解压缩多个文件,优化提取过程并节省时间。这种方法在处理大量归档文件时尤为有益。根据您的具体需求自定义脚本,并享受在文件提取任务中并行处理的好处!

相关推荐
limnade24 分钟前
将已有 SVN 服务打包成 Docker 镜像的详细步骤
linux·运维·docker
kfepiza2 小时前
`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405
linux·网络·笔记·tcp/ip·ip·tcp
流星白龙2 小时前
【Linux】39.一个基础的HTTP Web服务器
linux·服务器·http
菜鸟康2 小时前
Linux网络编程——TCP协议格式、可靠性分析
linux·网络·tcp/ip
共享家95272 小时前
Linux权限管理:从入门到实践
linux·运维·服务器
霖檬ing3 小时前
PXE远程安装服务器
linux·运维
Starry_hello world3 小时前
Linux 入门指令(1)
linux·笔记·有问必答
alden_ygq5 小时前
linux查询inode使用率
linux·运维·chrome
_天明_5 小时前
centos 安装python3.9.9
linux·运维·centos
冷冷清清中的风风火火6 小时前
linux里怎么禁用 其他用户使用sudo添加定时器,例如创建的tomcat用户禁止使用 sudo crontab -u tomcat -e 添加定时器
linux·tomcat·firefox