Bash-文件名更改日期+1



我有大约500个文件需要用报告所代表的日期重命名。文件名当前为:

WUSR1453722998383.csv
WUSR1453723010659.csv
WUSR1453723023497.csv

等等。文件名中的数字与日期无关,所以我不能用文件名来指导文件应该重命名为什么。报告从2014年12月2日开始,直到昨天(2016年4月9日),每个月的每一天都有一份报告。幸运的是,文件名是按顺序排列的,因此2014年12月4日的编号将高于2014年12日的编号。这意味着文件会自动按字母顺序列出。

然而,CSV的第一行数据之前有一个日期:

As at Date,2014-12-02

现在我已经检查了我已经拥有了所有的文件,我做到了,那么将其重命名为日期的最佳方法是什么?我可以将开始日期设置为2014年12月2日,并将每个文件重命名为+1日期,或者脚本可以读取文件第一行的日期(例如As at Date,2014-12-02),并使用该日期重命名文件。

我不知道如何在bash中编写上面的任何一个方法,所以如果你能帮忙,我将不胜感激。

在文件输出方面,我希望:

2014年12月2日.csv2014年3月12日.csv

上也是如此

这就是你需要的答案吗?假设所有文件都在当前目录下。在做真正的手术之前先做一些测试。条件是cvs文件中的每个日期字符串都是唯一的。否则会覆盖一些文件。

#!/bin/bash
for f in *.csv
do 
    o=$(sed '1q' $f |awk -F"[,-]" '{print $NF"-"$(NF-1)"-"$(NF-2)".csv"}')
    # should we backup the file?
    # cp $f ${f}.bak
    mv $f $o
done

最新更新