2016-04-10 46 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

圖例,謝謝。 –