news 2026/5/1 6:15:58

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/5/1 5:04:46

RPG-Maker-MV-Decrypter:突破加密限制的资源处理创新方法

RPG-Maker-MV-Decrypter&#xff1a;突破加密限制的资源处理创新方法 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://gitc…

作者头像 李华
网站建设 2026/4/18 7:20:06

通义千问1.5-1.8B-Chat-GPTQ-Int4与SpringBoot的微服务集成指南

通义千问1.5-1.8B-Chat-GPTQ-Int4与SpringBoot的微服务集成指南 最近在做一个内部知识问答系统&#xff0c;需要集成一个轻量级的AI对话模型。通义千问1.5-1.8B-Chat-GPTQ-Int4这个版本&#xff0c;模型尺寸小、推理速度快&#xff0c;特别适合部署在资源有限的微服务环境里。…

作者头像 李华
网站建设 2026/4/27 21:37:43

MedGemma-X企业级部署:Docker容器化方案详解

MedGemma-X企业级部署&#xff1a;Docker容器化方案详解 想象一下&#xff0c;一家三甲医院的放射科&#xff0c;每天要处理上千份影像报告。医生们对着屏幕&#xff0c;一张张地分析X光片、CT影像&#xff0c;工作强度大&#xff0c;效率瓶颈也显而易见。传统的单机AI工具&am…

作者头像 李华
网站建设 2026/4/18 4:45:07

解放双手的京东评价神器:让购物反馈不再成为负担

解放双手的京东评价神器&#xff1a;让购物反馈不再成为负担 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 您是否也曾遇到这样的情况&#xff1a;刚收到网购商品&#xff0c;还没来得及体验…

作者头像 李华
网站建设 2026/4/22 9:04:06

使用Jimeng LoRA进行LaTeX文档智能排版:学术写作助手

使用Jimeng LoRA进行LaTeX文档智能排版&#xff1a;学术写作助手 写论文最烦人的是什么&#xff1f;不是想不出创新点&#xff0c;也不是实验做不出来&#xff0c;而是那些没完没了的格式调整。参考文献编号乱了&#xff0c;图表位置跑偏了&#xff0c;公式编号对不上&#xf…

作者头像 李华
网站建设 2026/4/20 8:07:45

Xinference-v1.17.1在网络安全中的应用:异常流量检测模型部署

Xinference-v1.17.1在网络安全中的应用&#xff1a;异常流量检测模型部署 1. 为什么传统安全方案需要AI加持 企业网络每天要处理数百万甚至上亿条网络连接请求&#xff0c;从员工访问内部系统、客户浏览网站&#xff0c;到API接口调用、云服务通信。这些流量里藏着大量正常行…

作者头像 李华