使用文件名中的信息重命名文件
问题描述:
我有大量的文件被命名为A2012178.1220.051.2012178233531.hdf在那里,从第2个字符到第8个是日期,年份和茱莉安日。从第13个字符到文件的扩展名是垃圾给我...所以我想重命名文件并转换日期(为了方便起见)。使用文件名中的信息重命名文件
到目前为止,我可以将日期转换在bash
但我不知道该怎样来读取文件名年和儒略日和bash的内更换名字的想法脚本....
任何想法?
答
使用参数替换来获得子:
name="A2012178.1220.051.2012178233531.hdf"
Year=${name:1:4}
JulianDay=${name:5:3}
答
棘手的部分是儒略日具有可变长度,所以你不提前知道时间怎么给它。所以,你可能做这样的事情:
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填充,这是不明确的,如果它是零填充的话,就容易多了)。
非常好...它工作得很好... – 2013-03-28 09:31:28