我有一个文件夹,里面都是格式如下的 jpeg 文件:
0001_20210516_XYZ.jpg
0002_20210516_XYZ.jpg
123_20210516_XYZ.jpg
01_20210516_XYZ.jpg
我想重命名所有文件,以便删除中间的日期字符串,因此文件看起来像:
0001_XYZ.jpg
0002_XYZ.jpg
123_XYZ.jpg
01_XYZ.jpg
我尝试使用这个答案使用以下代码编写正则表达式以删除 8 位数字:
rename - 's/^_\d{8}\_//' *
但这没有任何作用。我不确定如何正确格式化它,以便删除中间的日期字符串。
答案1
要使用基于 Perl 的rename
(又名file-rename
)删除第一个下划线和后面的 8 位数字,您需要删除行首锚点^
和第二个下划线(否则您最终会得到0001XYZ.jpg
等)
所以:
rename -n 's/_\d{8}//' *_*_*.jpg
或者您可以使用mmv
(来自同名的 Ubuntu 包):
mmv -n '*_*_*.jpg' '#1_#3.jpg'
无论哪种情况,这-n
都是为了测试——当您对提议的更改感到满意时,请将其删除。
如果您坚持使用重命名的版本util-linux
(在我的系统上安装rename.ul
),那么您能做的最好的事情就是匹配文字字符串_20210516
:
rename.ul -vn _20210516 '' *_*_*.jpg
如果你确实需要删除今天的你可以将其推广到
rename.ul -vn "_$(date +%Y%m%d)" '' *_*_*.jpg
(注意rename.ul from util-linux 2.34
做支持一个-n
选项,我在这里使用它是为了演示目的 - 如果你的版本不支持,请进行相应调整)。