我写了一个脚本来访问每个目录并使用 imagemagick 来拼接它们以用于游戏目的的平铺。
find . -type d | while read d; do
# $k = filename generated from folder name
montage -border 0 -geometry +0+0 -background none -tile 6x $d/* ~/tiles/$k.png
done
当图像像这样命名时它工作得很好,因为使用 * 时顺序被保留:im_0001.png, im_0002.png...
但是当有人像这样命名图像时它会失败: im_1.png、im_2.png
,.. 因为 im_10.png
出现在 im_2.png
之前并且订单失败。始终手动修复文件名并不容易,有没有办法通过 *
枚举文件名但强制使用数字顺序?我知道排序函数具有该功能,但我如何在我的脚本中执行此操作?由于文件名没有结构,我很好奇如何实现这一点。
最佳答案
我相信您必须先重命名这些文件:
#!/bin/bash
ext=.png
for f in *$ext; do
num=$(basename "${f##*_}" $ext)
mv "$f" "${f%_*}_$(printf "%04d" $num)$ext"
done
关于linux - Bash 用 * 数字枚举文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17342153/