imagemagick 蒙太奇:用部分文件名标记图像

imagemagick montage: label images with part of filename

我想剪辑多个名称如下的文件:

1235_9123a46d52ecb2de.png
123_6a51ef8968c64b94.png
1269_a7059318d47dbc01.png
12_45fb8c628863d77a.png
1347_04355d15f39e1e06.png
1349_bcbad21a686712d1.png
1368_229b9d3f692fdd61.png
1369_f69c36e04ba37bcb.png
137_ec3571cde47f7b8a.png
...

我想用下划线前的部分文件名来标记每张图片 _

如果我使用下面的命令 montage -label %t * show: 然后显示整个文件名很长。是否可以通过某种方式从文件名中提取子字符串?

montage 实用程序不支持子字符串操作,但对于您的工作, 是理想的选择。

 #!/bin/bash
 SOURCES="1235_9123a46d52ecb2de.png 123_6a51ef8968c64b94.png 1269_a7059318d47dbc01.png"
 # or SOURCES=$(find . -name "*.png")
 # Iterate over known files
 for FILENAME in ${SOURCES[@]}
 do
    # Substring up to first "_" character
    LABEL=$(echo $FILENAME | cut -d "_" -f 1)
    # Set meta-data label
    mogrify -label $LABEL $FILENAME
 done
 montage -label %l $SOURCES show: