linux - Bash 用 * 数字枚举文件

标签 linux bash sorting imagemagick tiling

我写了一个脚本来访问每个目录并使用 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/

相关文章:

Linux:如何列出和优化今天创建的所有 JPEG 文件?

java - Java中的桶排序

android - 如何在 Android 原生 C 代码的系统函数中使用 cp(复制)命令

linux - oracle启动成功后如何执行shell脚本

c - 代码 0x017 在未处理的页面错误中表示什么

python - 为体育联盟生成自然时间表

c - 在链接列表上使用合并排序的段错误

linux - 安排 cron 条目仅在尚未运行时运行脚本

bash - 在 Bash 中获取日期(当前时间前一天)

linux - 路由器上的两个 SSH (Jumphost)