名前に埋め込まれた日付でs3ストレージのディレクトリを並べ替えたいのですが。
私が走るとき
s3cmd ls s3://xyz/private/backups/mails/daily/ | awk '{print $2}'
それはのようなディレクトリを一覧表示します
s3://xyz/private/backups/mails/daily/01_Apr_2020/
s3://xyz/private/backups/mails/daily/02_Apr_2020/
s3://xyz/private/backups/mails/daily/03_Apr_2020/
s3://xyz/private/backups/mails/daily/04_Apr_2020/
s3://xyz/private/backups/mails/daily/05_Apr_2020/
s3://xyz/private/backups/mails/daily/06_Apr_2020/
s3://xyz/private/backups/mails/daily/07_Apr_2020/
s3://xyz/private/backups/mails/daily/08_Apr_2020/
s3://xyz/private/backups/mails/daily/09_Apr_2020/
s3://xyz/private/backups/mails/daily/10_Apr_2020/
s3://xyz/private/backups/mails/daily/11_Apr_2020/
s3://xyz/private/backups/mails/daily/12_Apr_2020/
s3://xyz/private/backups/mails/daily/13_Apr_2020/
s3://xyz/private/backups/mails/daily/14_Apr_2020/
s3://xyz/private/backups/mails/daily/15_Apr_2020/
s3://xyz/private/backups/mails/daily/30_Mar_2020/
s3://xyz/private/backups/mails/daily/31_Mar_2020/
これらを日付順に表示して、次のようにします
s3://xyz/private/backups/mails/daily/30_Mar_2020/
s3://xyz/private/backups/mails/daily/31_Mar_2020/
s3://xyz/private/backups/mails/daily/01_Apr_2020/
s3://xyz/private/backups/mails/daily/02_Apr_2020/
s3://xyz/private/backups/mails/daily/03_Apr_2020/
....
....
列と-M(月)フラグで並べ替えを試みましたが、機能しません。
私の目標はn日より古いディレクトリを削除することですが、 s3cmd lsはディレクトリの作成/変更日を返さないため、私は難しい方法でそれをしなければなりません。
これをどのように機能させることができますか?
... |
awk -F'[/_]' '{printf "%04d%02d%02d %s\n", $(NF-1), index(" JanFebMarAprMayJunJulAugSepOctNovDec",$(NF-2))/3, $(NF-3), $0}' |
sort |
sed 's/[0-9]* //'
" Jan..."
には2スペースがあることに注意してください。これはバグではありません。awkのインデックスは、他の言語のように0からではなく、1から始まります。
A GNU awk
代わりにdate
を使用
awk -F'[/_]' '{
D=$(NF-3)"-"$(NF-2)"-"$(NF-1);
"date +%Y-%m-%d -d "D|getline nd;
print nd, $0
}' file1 | sort | cut -d" " -f 2
ウォークスルー
分割$0
上のフィールド/
または_
awk -F'[/_]' '{
それらを有効な日付として再構成する
D=$(NF-3)"-"$(NF-2)"-"$(NF-1);
シェルのdate
関数を使用して、月をテキストから数値に変換し、awk
のgetline
をパイプして新しい変数に戻す
"date +%Y-%m-%d -d "D|getline nd;
ここに新しいものはありません
print nd, $0
}' file1 | sort | cut -d" " -f 2
出力
s3://xyz/private/backups/mails/daily/30_Mar_2020/
s3://xyz/private/backups/mails/daily/31_Mar_2020/
s3://xyz/private/backups/mails/daily/01_Apr_2020/
s3://xyz/private/backups/mails/daily/02_Apr_2020/
s3://xyz/private/backups/mails/daily/03_Apr_2020/
代替gensub
を使用して少し無駄をなくす
awk -F'/' '{
"date +%Y%m%d -d "gensub("_","-","g",$(NF-1))|getline nd;
print nd, $0
}' file1 | sort | cut -d" " -f2