使用文件名中的信息重命名文件

时间:2013-03-27 17:31:57

标签: bash file

我有大量的文件名为 A2012178.1220.051.2012178233531.hdf 那里,从第2个字符到第8个字符是日期,年份加上朱利安日。从第13个字符到文件的扩展名称对我来说是垃圾...所以我想重命名文件并转换日期(为方便起见)。

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

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

但我不知道如何从文件名中读取年份和朱利安日,并在bash脚本中替换名称....

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用参数替换来获取子串:

name="A2012178.1220.051.2012178233531.hdf" 

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

答案 1 :(得分: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位数字作为年份,其余为朱利安日。

(这假设julian日不是0填充,这在你的问题中是不明确的。如果它是零填充,则更容易)。