当前位置: 首页 > news >正文

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

介绍

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

先决条件

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

  • Bash
  • GNU Parallel

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

在Ubuntu上安装

# 安装Bash(通常已经安装)
sudo apt-get update
sudo apt-get install bash# 安装GNU Parallel
sudo apt-get install parallel

在CentOS上安装

# 安装Bash(通常已经安装)
sudo yum install bash# 安装GNU Parallel
sudo yum install parallel

场景

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

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)
104.108
57.763
218.293
136.077
在这里插入图片描述

结论

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

http://www.lryc.cn/news/259530.html

相关文章:

  • T天池SQL训练营(五)-窗口函数等
  • 道可云元宇宙每日资讯|上海市区块链关键技术攻关专项项目立项清单公布
  • 大语言模型有什么意义?亚马逊训练自己的大语言模型有什么用?
  • RabbitMQ-学习笔记(初识 RabbitMQ)
  • SQL Update语句
  • C语言-WIN32API介绍
  • TFIDF、BM25、编辑距离、倒排索引
  • MySQL之DML语句
  • kubernetes集群常用指令
  • PyQt6 QTreeView树视图
  • 链表|148. 排序链表
  • 如何解决5G基站高能耗问题?
  • PyTorch实现逻辑回归
  • 什么是FPGA原型验证?
  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十四:系统设置模块相关功能实现
  • 使用Visual Studio(VS)创建空项目的Win32桌面应用程序【main函数入口变WinMain】
  • 基于自动化脚本批量上传依赖到nexus内网私服
  • Linux中ps命令使用指南
  • PHP开发语言中,网页端常用的标签
  • Java 入门第四篇 集合
  • VBA技术资料MF93:将多个Excel表插入PowerPoint不同位置
  • STM32 MCU的易坑点收集
  • Vue3项目filter.js组件封装
  • Linux: pwd命令查看当前工作目录
  • 【深度学习】PHP操作mysql数据库总结
  • 【送书活动】探究AIGC、AGI、GPT和人工智能大模型
  • Apple Find My「查找」认证芯片找哪家,认准伦茨科技ST17H6x芯片
  • java.lang.IllegalArgumentException: Could not resolve placeholder XXX‘ in value
  • 自动机器学习是什么?概念及应用
  • el-date-picker限制选择7天内禁止内框选择