2016-04-10 123 views
0

我有大约500个文件,需要使用报告所代表的日期进行重命名。目前的文件名是:Bash - 文件名称更改日期+ 1

WUSR1453722998383.csv 
WUSR1453723010659.csv 
WUSR1453723023497.csv 

等等。文件名中的数字与日期无关,因此我不能使用文件名作为文件应该重命名的指南。报告从2014年12月2日开始,每个月的每一天都有一份报告,直到昨天(09/04/2016)。幸运的是,文件名是连续的 - 所以2014年12月4日的数字要比2014年12月3日的数字更高,这个数字会比2014年12月2日的数字更高。这意味着文件会按字母顺序自动列出。

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

As at Date,2014-12-02 

现在我已经签,我已经将所有文件和我做,有啥重命名的最佳方式到那个日期?我可以将开始日期设置为02/12/2014,并将每个文件重命名为+1日期,或者脚本可以读取文件第一行的日期(例如As at Date,2014-12-02),并使用该日期重命名文件。

我不知道如何在bash中编写上述任何一种方法,所以如果你可以帮助解决这个问题,那会非常感激。

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

02-12-2014.csv 03-12-2014.csv

等等

+0

欢迎来到Stack Overflow。请尽快阅读[关于]页面。你是否希望文件按日期顺序列出?因此,使用诸如'WUSR-2014-02-12.csv'(或者'WUSR-20140212.csv')这样的名字会给你名字上的日期?您应该将所需的输出(最终文件名)添加到您的问题中(您可以编辑您的问题)。你需要保留原始号码吗?你怎么检查你有所有的文件?不管你做什么都应该给你一些关于如何在shell脚本中获得你需要的信息的想法。你有什么尝试? –

+0

我使用过:head -q -n 1 * .csv> output.csv来检查我是否拥有所有文件(我使用了输出CSV并将它与从2014年12月12日到昨天的每个日期进行匹配,它们是所有那里)。我假设我可以使用类似这样的方式进行文件重命名(每个CSV的第一行,并使用日期重命名文件),但我不知道如何将它们连接在一起。 .. –

+0

我不明白为什么人们会喜欢这些文件,以便2014年2月14日以及2016年2月14日之后的文件,以及2014年2月15日,2015年2月15日,2016年2月15日之后的文件然而,这是一个普遍的问题 - 为什么会有一些原因,但我确定它主要是潜意识的。 –

回答

1

是,答案你需要?假设所有文件都在当前目录下。在做实际操作之前做一些测试。条件是您的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 
+0

图例,谢谢。 –