You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过IF/FOR语句实现Bash图片预处理的关键词匹配

批量图片预处理与拼接的Shell脚本实现方案

需求背景

我正在对同一文件夹${vizu}中的图片做后处理,原本用以下命令拼接所有含chicont关键词的图片:

# 拼接所有名称含chicont关键词的图片
montage "${vizu}"/*chicont*.png -geometry 1200 -tile x"${rows}"e -mattecolor DarkGoldenrod2 -mode Frame "${vizu}"/${prot}_chimcont_rep${i}.png

现在需要给部分图片先执行预处理:

convert "${vizu}"/${some_keyword}*chicont*.png -distort BarrelInverse 3:30 "${vizu}"/${some_keyword}_chimcont_DISTORTED.png

核心需求:通过IF/FOR语句实现关键词列表的匹配,对指定图片执行预处理后,再用montage拼接所有图片(含处理后和未处理的)。


方法一:遍历关键词列表(推荐)

直接遍历预先定义的关键词数组,对每个关键词匹配的图片批量执行预处理,逻辑清晰且高效:

#!/bin/bash

# 1. 定义需要预处理的关键词数组(普通数组足够,无需关联数组)
keywords=("some_keyword1" "some_keyword2" "some_keyword3")

# 2. 遍历每个关键词,执行convert预处理
for keyword in "${keywords[@]}"; do
    # 匹配当前关键词开头、包含chicont的图片,批量处理
    convert "${vizu}"/${keyword}*chicont*.png -distort BarrelInverse 3:30 "${vizu}"/${keyword}_chimcont_DISTORTED.png
done

# 3. 执行最终拼接:包含原chicont图片和预处理后的图片
montage "${vizu}"/*chicont*.png "${vizu}"/*_chimcont_DISTORTED.png -geometry 1200 -tile x"${rows}"e -mattecolor DarkGoldenrod2 -mode Frame "${vizu}"/${prot}_chimcont_rep${i}.png

关键说明

  • 用普通数组存储关键词,比关联数组更适配当前场景(无需键值对映射)
  • 预处理后的图片命名带_DISTORTED后缀,避免与原文件冲突
  • 最终montage命令同时包含原文件和处理后文件,确保所有目标图片被拼接

方法二:遍历图片并判断关键词匹配

如果需要先遍历所有chicont图片,再判断是否属于关键词列表,可采用此方式:

#!/bin/bash

# 1. 定义关键词数组
keywords=("some_keyword1" "some_keyword2" "some_keyword3")

# 2. 遍历所有含chicont的图片
for img in "${vizu}"/*chicont*.png; do
    # 提取纯文件名(去除路径)
    filename=$(basename "$img")
    # 检查文件名是否包含任意一个目标关键词
    for keyword in "${keywords[@]}"; do
        if [[ "$filename" == *"$keyword"* ]]; then
            # 执行预处理,输出文件带关键词标识
            convert "$img" -distort BarrelInverse 3:30 "${vizu}"/${keyword}_chimcont_DISTORTED.png
            break  # 匹配到关键词后立即跳出,避免重复处理
        fi
    done
done

# 3. 执行最终拼接
montage "${vizu}"/*chicont*.png "${vizu}"/*_chimcont_DISTORTED.png -geometry 1200 -tile x"${rows}"e -mattecolor DarkGoldenrod2 -mode Frame "${vizu}"/${prot}_chimcont_rep${i}.png

关键说明

  • 用basename提取文件名,避免路径干扰关键词匹配逻辑
  • 内层循环匹配到关键词后立即跳出,防止同一图片被多个关键词重复处理

注意事项

  1. 若原图片预处理后无需保留,可在convert命令后添加rm "$img"删除原文件,但建议先备份再操作
  2. 确保已安装ImageMagick工具(montage和convert均为其内置命令)
  3. 若关键词包含特殊字符,需给变量添加双引号(如"${keyword}"),避免通配符解析错误

内容的提问来源于stack exchange,提问作者James Starlight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:55:23