使用 bash 批量重命名文件

使用 bash 批量重命名文件

我有一堆像这样的编号文件:

file #01.ext
file #02.ext
file #03.ext
file #04.ext
file #05.ext

我想要的是让它们都具有三位数(两个前导 0)而不是一位数字,所以;

file #001.ext
file #002.ext
file #003.ext
file #004.ext
file #005.ext

我的想法是使用 sed 将 # 替换为 #0(在我的情况下这已经足够了,目前还没有超过 #99 的文件)。所有文件都在同一个文件夹中,我该怎么做?

答案1

要保护已经 3 位数字的文件

for f in "file #"*.ext; do
  num=${f#file #}
  num=${num%.ext}
  new=$(printf "file #%03d.ext" $num)
  echo mv "$f" "$new"
done

这将在控制台中显示要执行的命令,但实际上并不重命名文件。

一旦您对它要做的事情感到满意,您可以通过删除单词echo并重新运行它来重命名文件。

答案2

你不需要 sed 来实现这一点。只需一个非常简单的命令即可完成:

rename 's/#0/#00/' *.ext

例子:

temp$ ls
file #01.ext  file #02.ext  file #03.ext  file #04.ext  file #05.ext
temp$ rename 's/#0/#00/' *.ext
temp$ ls
file #001.ext  file #002.ext  file #003.ext  file #004.ext  file #005.ext

答案3

这可以在文件夹内完成:

ls | sed 's/\(.*\)#\(.*\)/mv "&" "\1#0\2"/' | sh

答案4

这是一个混合解决方案:

ls | sed -r "s/(.*#)([0-9]+)([^0-9]*)/printf 'mv -v \"&\" \"%s%03d%s\"' \"\1\" \"\2\" \"\3\"/e;e"

相关内容