使用 Bash 从文件名中的特定位置移动数字

Using Bash to Move Digits From Specific Location in Filename

我有以下格式的文件名:

images.jpeg-028

我想将目录中每个文件的文件名从上面的格式转换为以下格式:

images-028.jpeg

所有文件名末尾的数字都是三位数字。

基于另一个论坛上的 thread,我正在考虑以下内容:

for i in *; do mv "$i"\-(\d+) \-(\d+)"$i"; done

但我对其他基于 Bash 的方法持开放态度。

bash 中使用 for 循环完成了无数文件重命名任务后,我现在发现 rename 实用程序非常宝贵。

这应该适用于您的情况:

rename 's/\.jpeg-(\d+)/-.jpeg/g' images.jpeg-*

注意:我指的是 Perl 中的 File::Rename 模块, 不是 rename 实用程序,它包含在许多 Linux util-linux 包中的发行版。

如果您已经拥有 util-linux 的版本,您可能需要阅读以下内容:

Get the Perl rename utility instead of the built-in rename.

如果您打算使用纯粹的 bash 解决方案,或者您只是不想安装 rename 的麻烦,这应该可行:

for i in images.jpeg-*; do
   mv "$i" "images-${i##*-}.jpeg"
done