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 に答える