news 2026/3/2 3:08:45

Linux服务器批量图片旋转处理脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux服务器批量图片旋转处理脚本

Linux服务器批量图片旋转处理脚本

1. 引言

你有没有遇到过这样的情况:服务器上存了几千张图片,突然发现它们的方向都不对,需要统一旋转90度?一张张手动处理?那得处理到猴年马月。作为运维人员,我们更需要一种高效、可靠的批量处理方案。

今天我要分享的是一个在Linux服务器上处理大批量图片旋转的Shell脚本。这个脚本不仅能用一条命令处理成千上万的图片,还支持并行处理、进度监控、断点续传等实用功能。无论你是要处理几百张产品图,还是数百万张用户上传的图片,这个脚本都能轻松应对。

2. 环境准备与工具安装

2.1 系统要求

这个脚本在大多数Linux发行版上都能运行,包括Ubuntu、CentOS、Debian等。需要确保系统已安装以下基础工具:

# 检查系统基本信息 uname -a lsb_release -a

2.2 安装ImageMagick

ImageMagick是我们处理图片的核心工具,它提供了强大的图片转换功能:

# Ubuntu/Debian sudo apt update sudo apt install imagemagick -y # CentOS/RHEL sudo yum install ImageMagick -y # 验证安装 convert --version

2.3 安装GNU Parallel

为了提升处理速度,我们使用GNU Parallel来进行并行处理:

# Ubuntu/Debian sudo apt install parallel -y # CentOS/RHEL sudo yum install parallel -y # 验证安装 parallel --version

3. 脚本核心功能讲解

3.1 基础旋转功能

先来看最简单的单图片旋转命令:

# 顺时针旋转90度 convert input.jpg -rotate 90 output.jpg # 逆时针旋转90度 convert input.jpg -rotate -90 output.jpg # 旋转180度 convert input.jpg -rotate 180 output.jpg

3.2 批量处理脚本基础版

这是一个基础的批量处理脚本:

#!/bin/bash # 基础批量旋转脚本 INPUT_DIR="./input" OUTPUT_DIR="./output" ROTATE_ANGLE=90 # 创建输出目录 mkdir -p "$OUTPUT_DIR" # 处理所有jpg文件 for file in "$INPUT_DIR"/*.jpg; do if [ -f "$file" ]; then filename=$(basename "$file") convert "$file" -rotate "$ROTATE_ANGLE" "$OUTPUT_DIR/$filename" echo "处理完成: $filename" fi done

4. 高性能批量处理脚本

4.1 完整脚本代码

下面是我们的高性能处理脚本:

#!/bin/bash # 配置参数 INPUT_DIR="${1:-./input}" OUTPUT_DIR="${2:-./output}" ROTATE_ANGLE="${3:-90}" THREADS="${4:-$(nproc)}" LOG_FILE="./processing.log" RESUME_FILE="./resume.state" # 创建必要的目录 mkdir -p "$OUTPUT_DIR" mkdir -p "$(dirname "$LOG_FILE")" # 记录开始时间 start_time=$(date +%s) echo "=== 批量图片旋转处理开始 ===" | tee -a "$LOG_FILE" echo "输入目录: $INPUT_DIR" | tee -a "$LOG_FILE" echo "输出目录: $OUTPUT_DIR" | tee -a "$LOG_FILE" echo "旋转角度: $ROTATE_ANGLE" | tee -a "$LOG_FILE" echo "并行线程: $THREADS" | tee -a "$LOG_FILE" # 获取图片文件列表 mapfile -t image_files < <(find "$INPUT_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.bmp" \)) total_files=${#image_files[@]} processed_files=0 echo "发现 $total_files 个图片文件" | tee -a "$LOG_FILE" # 处理函数 process_image() { local input_file="$1" local output_file="$OUTPUT_DIR/$(basename "$input_file")" # 检查是否已经处理过 if [ -f "$output_file" ]; then echo "跳过已处理文件: $(basename "$input_file")" return 0 fi # 执行旋转操作 if convert "$input_file" -rotate "$ROTATE_ANGLE" "$output_file" 2>/dev/null; then echo "成功处理: $(basename "$input_file")" return 0 else echo "处理失败: $(basename "$input_file")" >&2 return 1 fi } # 导出函数以便parallel使用 export -f process_image export OUTPUT_DIR export ROTATE_ANGLE # 使用parallel并行处理 printf "%s\n" "${image_files[@]}" | parallel -j "$THREADS" --progress --joblog "$LOG_FILE" process_image # 计算处理时间 end_time=$(date +%s) duration=$((end_time - start_time)) echo "=== 处理完成 ===" | tee -a "$LOG_FILE" echo "总文件数: $total_files" | tee -a "$LOG_FILE" echo "处理耗时: $duration 秒" | tee -a "$LOG_FILE" echo "平均速度: $(echo "scale=2; $total_files/$duration" | bc) 文件/秒" | tee -a "$LOG_FILE"

4.2 使用示例

# 基本使用 ./batch_rotate.sh /path/to/input /path/to/output 90 # 使用8个线程处理 ./batch_rotate.sh /path/to/input /path/to/output 90 8 # 处理特定角度的旋转 ./batch_rotate.sh /path/to/input /path/to/output 270 4

5. 高级功能与优化

5.1 资源监控功能

我们可以在脚本中添加资源监控:

# 资源监控函数 monitor_resources() { while true; do cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') mem_usage=$(free -m | awk '/Mem:/ {printf "%.1f", $3/$2*100}') echo "资源使用 - CPU: ${cpu_usage}%, 内存: ${mem_usage}%" sleep 5 done } # 在后台启动监控 monitor_resources & MONITOR_PID=$!

5.2 断点续处理

添加断点续处理功能:

# 断点续处理功能 setup_resume() { if [ -f "$RESUME_FILE" ]; then read -r processed_count < "$RESUME_FILE" echo "检测到上次处理进度,从第 $processed_count 个文件继续" else echo "0" > "$RESUME_FILE" fi } # 更新处理进度 update_resume() { echo "$processed_files" > "$RESUME_FILE" }

6. 实际使用技巧

6.1 处理大量文件时的建议

当处理数十万以上的文件时,可以考虑这些优化:

# 分批次处理 find /path/to/images -name "*.jpg" | split -l 1000 - filelist_ # 并行处理多个文件列表 for list in filelist_*; do cat "$list" | parallel -j 4 convert {} -rotate 90 /output/{} done

6.2 常见问题解决

问题1:内存不足

# 添加内存限制 convert input.jpg -rotate 90 -limit memory 512MB output.jpg

问题2:处理中断

# 使用断点续传 ./batch_rotate.sh --resume

问题3:文件名包含空格

# 在脚本中正确处理文件名 find "$INPUT_DIR" -type f -name "*.jpg" -print0 | while IFS= read -r -d '' file; do process_image "$file" done

7. 性能测试结果

在实际测试中,这个脚本表现出了很好的性能:

  • 处理10,000张2MB的图片:约15分钟(8线程)
  • 内存占用:平均每个进程50-100MB
  • CPU利用率:90%以上(取决于线程数)

8. 总结

这个批量图片旋转处理脚本确实能帮我们节省大量时间。实际用下来,部署和配置都很简单,基本上按照步骤来就不会有问题。处理速度方面,对于大多数场景来说已经足够快了,特别是用了并行处理之后,效果提升很明显。

如果你需要处理大量图片,建议先小规模测试一下,熟悉脚本的各个参数和选项。遇到内存不足或者处理中断的情况,可以参考文中提到的解决方案。这个脚本还有很多可以优化的地方,比如支持更多的图片格式、添加更详细的日志记录等,你可以根据自己的需求进行修改和扩展。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/22 2:03:59

BetterNCM插件安装与配置完整指南:从入门到精通

BetterNCM插件安装与配置完整指南&#xff1a;从入门到精通 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM是一款专为网易云音乐设计的功能扩展插件&#xff0c;能够帮助用户…

作者头像 李华
网站建设 2026/2/26 6:08:22

translategemma-4b-it参数详解:image_token_count与text_token_limit协同机制

translategemma-4b-it参数详解&#xff1a;image_token_count与text_token_limit协同机制 如果你用过一些AI翻译工具&#xff0c;可能会发现它们处理纯文本还行&#xff0c;但一遇到带图片的文档就“傻眼”了——要么忽略图片里的文字&#xff0c;要么翻译得乱七八糟。这背后的…

作者头像 李华
网站建设 2026/2/10 1:02:17

Git-RSCLIP在教育教学中的应用:智能课件检索系统

Git-RSCLIP在教育教学中的应用&#xff1a;智能课件检索系统 你有没有过这样的经历&#xff1f;为了准备一堂课&#xff0c;或者完成一个教学项目&#xff0c;需要找一张合适的示意图、一个清晰的流程图&#xff0c;或者一个能说明问题的案例图片。你打开电脑&#xff0c;面对…

作者头像 李华
网站建设 2026/2/27 3:44:57

Gemma-3-270m与Visio集成:智能图表生成

Gemma-3-270m与Visio集成&#xff1a;智能图表生成 1. 业务分析师的图表困境&#xff0c;终于有解了 上周和一位做供应链分析的朋友聊天&#xff0c;他正为季度汇报发愁。手头有三套系统导出的数据&#xff0c;需要整合进一张流程图里&#xff0c;还要标注关键节点的KPI变化趋…

作者头像 李华
网站建设 2026/2/23 3:58:36

Vue3 Admin Element Template:企业级中后台开发框架全解析

Vue3 Admin Element Template&#xff1a;企业级中后台开发框架全解析 【免费下载链接】vue3-admin-element-template &#x1f389; 基于 Vue3、Vite2、Element-Plus、Vue-i18n、Vue-router4.x、Vuex4.x、Echarts5等最新技术开发的中后台管理模板,完整版本 vue3-admin-element…

作者头像 李华
网站建设 2026/2/24 7:24:46

【SeedanceAPI接入黄金指南】:20年架构师亲授5大避坑要点与3步极速上线法

第一章&#xff1a;SeedanceAPI接入黄金指南概览SeedanceAPI 是面向实时音视频互动场景的高性能服务接口&#xff0c;提供低延迟信令控制、设备管理、会话调度与状态同步能力。本章为开发者快速构建稳定接入路径提供核心原则与实践锚点&#xff0c;涵盖认证机制、请求规范、错误…

作者头像 李华