2013-03-27 196 views
1

我有大量的文件被命名为A2012178.1220.051.2012178233531.hdf在那里,从第2个字符到第8个是日期,年份和茱莉安日。从第13个字符到文件的扩展名是垃圾给我...所以我想重命名文件并转换日期(为了方便起见)。使用文件名中的信息重命名文件

到目前为止,我可以将日期转换在bash

​​

但我不知道该怎样来读取文件名年和儒略日和bash的内更换名字的想法脚本....

任何想法?

回答

2

使用参数替换来获得子:

name="A2012178.1220.051.2012178233531.hdf" 

Year=${name:1:4} 
JulianDay=${name:5:3} 
+0

非常好...它工作得很好... – 2013-03-28 09:31:28

0

棘手的部分是儒略日具有可变长度,所以你不提前知道时间怎么给它。所以,你可能做这样的事情:

read begin date end < <(echo $filename | sed -e 's/\(.\)\([[:digit:]]\+\)\(.*\)\ 
/\1 \2 \3/') 

Year=${date::4} 
JulianDay=${date:4} 

newdate=$(date -d "${Year}-01-01 +${JulianDay} days -1 day" "+%Y%m%d") 

mv $filename "${begin}${newdate}${end}" 

这基本上分裂了文件名拉出日期字段,然后抓住了第4位,与其余的是儒略日的一年。

(假设茱莉安日不是0填充,这是不明确的,如果它是零填充的话,就容易多了)。