从文件夹中的所有文件名中删除今天的日期字符串

从文件夹中的所有文件名中删除今天的日期字符串

我有一个文件夹,里面都是格式如下的 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选项,我在这里使用它是为了演示目的 - 如果你的版本不支持,请进行相应调整)。

相关内容