如何按日期批量重命名文件?

Posted

技术标签:

【中文标题】如何按日期批量重命名文件?【英文标题】:How to batch-rename files by date? 【发布时间】:2013-08-02 20:38:03 【问题描述】:

我可以使用哪些命令来重命名当前已命名的数百个文件

file.2003-01-02.txt
file.2003-01-04.txt

...等等?我希望他们被命名:

file_y2003m01d02.txt
file_y2003m01d04.txt

...等等

换句话说,file.2007-12-09.txt 将变为 file_y2007m12d09。是否有一组简单的命令可以做到这一点?

同样,我还有另一个问题,文件名为file_y2003m02d01_grid.txt。我想知道如何从每个文件名中删除_grid,使其符合我上面建议的格式。

【问题讨论】:

【参考方案1】:

您可以使用rename 命令:

rename 's/^file\.([0-9]4)-([0-9]2)-([0-9]2)\.txt$/file_y$1m$2d$3.txt/' *

这使用Perl regular expression substitution 来转换文件名。上面的命令说:

    查找以^ 开头和file. 的文件(. 必须转义,否则匹配任何字符),然后是捕获的()[0-9]4(一个数字,4 次),然后是-,然后是另一个捕获的数字组两次,依此类推,以.txt结束$

    然后,将这些文件重命名为file_y,然后是第一个捕获的组$1,然后是m,然后是第二个捕获的组$2,以此类推,并以.txt结尾.

您还应该能够弄清楚如何使用相同的命令来解决您的第二个问题,而您不知道 rename 的工作原理。

【讨论】:

【参考方案2】:

你也可以使用 sed:

例如:

ls | while read f; do echo "mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/')"; done

这将显示 bash 将运行的命令。要实际进行移动,请删除回声和引号:

ls | while read f; do mv $f $(echo $f | sed 's/\./_y/;s/-/m/;s/-/d/'); done

【讨论】:

以上是关于如何按日期批量重命名文件?的主要内容,如果未能解决你的问题,请参考以下文章

目录下所有图片按修改时间批量重命名

如何添加格式和批量重命名文件名?

文件重命名时快速添加时间前缀

js 如何批量重命名文件

目录下所有图片按修改时间批量重命名

目录下所有图片按修改时间批量重命名