1

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

到目前为止,我能够在 bash 中转换日期

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

但我不知道如何从文件名中读取年份和儒略日并替换 bash 脚本中的名称....

任何想法?

4

2 回答 2

2

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

name="A2012178.1220.051.2012178233531.hdf" 

Year=${name:1:4}
JulianDay=${name:5:3}
于 2013-03-27T18:08:32.160 回答
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 填充,这从你的问题中不清楚。如果它是零填充,那就容易多了)。

于 2013-03-27T18:20:10.570 回答