bash - 以正确的字母数字顺序获取文件名
问题描述
我在使用这个命令时遇到了问题(怀疑它与 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/
看:
推荐阅读
- excel - 错误 1004 函数并选择多个列
- flutter - FutureBuilder 不返回任何数据,但返回“对象实例”
- android - Xamarin 服务 - 根据时间表运行
- r - 降价插入制表符(R)
- c - 如何在 C 中创建 .txt 文件中每个单词的结构?
- python - 无法访问 docker 容器内的 jupyter notebook
- laravel - Laravel - old() 辅助函数在 Laravel 子类别选择下拉列表中失败
- html - Django html 扩展标签
- visual-studio-code - 未调用调试扩展 pauseRequest
- javascript - Javascript & HTML 单位转换器 - 如何使用一个输入字段作为常量