可变部分模式匹配,不同文件名相同

Patternmatching with variable part, which is the same in different filenames

我在一个名为:world_map_1.pngworld_map_2.pngworld_country_1.pngworld_country_2.png、...

的目录中有很多文件

我想使用 ImageMagick 将 world_map_2.png 附加到 world_map_1.png 并将输出存储在 world_map.png 中。我想对所有以 world 开头并以 12 结尾的文件执行此操作,所以我的方法是:

convert world_*_1.png world_*_2.png +append world_*.png

问题是 * 在所有 3 个名称中必须相同,因此我需要一种变量,我可以在第二个和第三个名称中重复使用它。

我会使用命令来检测 uniq "infixes":

for image in world_*_*.png
do 
    tmp="${image/world_/}"
    echo "${tmp/_*/}"
done | sort -u

然后,遍历它们

for token in $(for a in world_*_*.png; do tmp="${a/world_/}"; echo "${tmp/_*/}"; done | sort -u)
do 
    convert "world_$token"_*.png +append "world_$token.png"
done

创建一些假图像文件:

touch world_{map,country,something,else}_{01..04}.png

该命令运行以下所有行:

convert world_country_01.png world_country_02.png world_country_03.png world_country_04.png +append world_country.png
convert world_else_01.png world_else_02.png world_else_03.png world_else_04.png +append world_else.png
convert world_map_01.png world_map_02.png world_map_03.png world_map_04.png +append world_map.png
convert world_something_01.png world_something_02.png world_something_03.png world_something_04.png +append world_something.png