Unix - 名前の日付部分に基づいてファイルを取得する方法

Unix - 名前の日付部分に基づいてファイルを取得する方法

次のようなファイルがあるとします。

AA_XX_20111208
AA_XX_20111207
AA_XX_20111206
AA_XX_20111205
AA_XX_20111204
AA_XX_20111203

それでは、日付部分を使用して過去2ヶ月のファイルをどのように取得できますか?

たとえば、今月は2月ですが、1月と12月に関連するファイルの両方をインポートする必要があります。 3月には1月と2月のファイルをインポートし、毎月発生する必要があります。

例えば。 2月には12月と1月のファイルが必要です。

AA_XX_20121208
AA_XX_20121207
AA_XX_20121206

...すぐに

AA_XX_20130108
AA_XX_20130107
AA_XX_20130106

...すぐに

ベストアンサー1

GNU日付があると仮定すると、この関数は過去2ヶ月間のすべての日付を提供します。

dates_in_previous_two_months () { 
    for month_delta in 0 1; do
        # get the last day of a previous month
        day=$(date -d "$(date +%Y-%m-01) -$month_delta month -1 day" +%Y%m%d)
        until [[ $day == *00 ]]; do
            echo $day
            ((day--))
        done
    done
}

2013 年 2 月の特定の日付について、以下が返されます。

20130131
20130130
20130129
[... and so on until ...]
20121203
20121202
20121201

201302283月はからまでの日付で返されます。20130101

次のように使用できます。

for date in $(dates_in_previous_two_months); do
    "fetch" AA_XX_$date
done

または

dates_in_previous_two_months | xargs -I{} "fetch" AA_XX_{}

おすすめ記事