通过数字的变换重命名文件

通过数字的变换重命名文件

我想将一组名为 IMG0189.jpeg IMG0190.jpeg 等的文件分别重命名为 IMG01.jpeg IMG02.jpeg 等。有没有办法使用重命名命令来做到这一点?或者其他什么?我尝试阅读手册,但它非常简短,并没有提供任何有关移动数字的想法。

答案1

怎么样

ls > /tmp/list ; seq -w `ls | wc -l` | paste /tmp/list - | awk -F\\t '{ print $1, "IMG"$2".jpeg"}' | xargs -n2 mv
  • 列出文件并将列表重定向到临时文件/tmp/list
  • seq将等于文件数量的数字(用零填充) 写入STDOUT
    • 通过列出文件并wc以“行”模式传输到(字数统计)应用程序来获取文件数量
  • paste将上一个命令中的数字序列放到文件列表的右侧/tmp/list
    • 粘贴将两个文件粘贴在一起,并以字符分隔TAB
    • 将输出通过管道传输到下一个程序
  • 使用一个小awk程序来重新格式化这两个字段
    • 分隔符指定为制表符(\t- 第一个斜杠用于转义第二个斜杠)
    • 第一个字段$1,按原样打印的原始文件名
    • 第二个字段$2,序列号,以 IMG 前缀和 .jpeg 后缀打印
    • 将输出通过管道传输到下一个程序
  • 使用xargs,将参数对传递给mv(移动/重命名命令)
    • -n2意味着它将一次通过其中 2 个

注意,这假定您的原始文件名不包含空格。

如果要从 1 以外的数字开始,则需要操作 seq 的参数;例如

COUNT=`ls | wc -l` ; FIRST=32 ; LAST=$(($FIRST + $COUNT)) ; seq -w $FIRST $LAST

相关内容