我有大约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