首页 > 解决方案 > 以正确的字母数字顺序获取文件名

问题描述

我在使用这个命令时遇到了问题(怀疑它与 bash 相关,而不是特定于程序)

montage -verbose -label '%f' -font Helvetica -pointsize 10 -background '#ffffff' -fill 'gray' -auto-orient  -tile 8x6 -geometry 200x200+2+2 ./*.bluemap.jpg /media/

问题是它以文件 100002.bluemap.jpg 开头,而不是最小的数字 2016.bluemap.jpg

所有数字都不存在,例如2016年之后的下一个是6438、6685、9879

反正有没有让它正确地完成工作,正确的顺序?

还是我需要创建一些列表或其他东西?

我有点失落。。

标签: bashsortingglob

解决方案


使用 GNU 对文件名进行排序并将sort列表读入一个数组,然后在montage调用中展开它。

readarray -d '' -t files < <(printf '%s\0' ./*.bluemap.jpg | sort -z -t/ -k2n)
montage -verbose -label '%f' -font Helvetica -pointsize 10 -background '#ffffff' -fill 'gray' -auto-orient  -tile 8x6 -geometry 200x200+2+2 "${files[@]}" /media/

看:


推荐阅读