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

标签 linux bash unix rename batch-processing

我可以使用什么命令来重命名当前命名的数百个文件

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 ,以便它符合我上面建议的格式。

最佳答案

您可以使用重命名命令:

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

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

  1. 查找以 file. 开头 ^ 的文件(. 必须转义,否则它会匹配任何字符),然后按捕获的 ()[0-9]{4}(一个数字,4 次),然后是 -,然后是另一个捕获的组一个数字两次,等等,并以 .txt 结尾 $;

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

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

关于linux - 如何按日期批量重命名文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002250/

相关文章:

java - 转换用于 mysql 数据库的 java long unix 时间戳

linux - 可以在目录树之外写入或访问数据吗?

java - 使用camel文件组件从unix服务器监视Windows网络上的文件夹

linux - 如何仅批量重命名部分文件名?

linux - 如何在构建期间测量 CPU、内存和磁盘使用情况?

linux - 如何使用内核模块监控进程创建和统计

linux - 显示未登录的用户进程 linux bash 脚本

bash - 使用 sed 将反斜杠替换为斜杠

linux - bash 语句末尾的 "-;"是什么意思?

ruby-on-rails - Ruby on Rails - 无法将 "\x89"从 ASCII-8BIT 转换为 xxx/xxxx/xxxx 的 UTF-8