使用 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
我有以下格式的文件名:
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