bash - 以正确的字母数字顺序获取文件名

标签 bash sorting glob

我在使用此命令时遇到问题(怀疑它与 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

有没有办法让它以正确的顺序正确地完成工作?

或者我需要创建一些列表或其他东西吗?

我有点迷失了..

最佳答案

使用 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/

参见:

关于bash - 以正确的字母数字顺序获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62131044/

相关文章:

linux - 文件名中的旧 rsync 和空格

c++ - 如何从可执行文件中打开 bash?

c# - 与 C# 中的现有列表相比,如何对列表进行排序?

python - python 中的插入排序?

regex - Glob 匹配 2 个目录中的所有图像?

node.js - Glob/minimatch : how to gulp. src() 一切,然后排除文件夹但在其中保留一个文件

bash - 如何检查环境变量是否存在并获取其值?

linux - 如何使用 awk 逐行打印其他程序的结果?

java - 数组列表中的比较器

linux - 在linux中删除以2位数字结尾的文件