이름에 포함된 날짜를 기준으로 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/
....
....
열별로 정렬해 보았습니다.-중(월) 플래그가 있지만 작동하지 않습니다.
내 목표는 다음보다 오래된 것을 삭제하는 것입니다.N며칠이 지났지만 그 이후로s3cmdls는 디렉토리의 생성/수정 날짜를 반환하지 않으므로 이 작업을 어렵게 수행해야 했습니다.
어떻게 해야 하나요?
답변1
... |
awk -F'[/_]' '{printf "%04d%02d%02d %s\n", $(NF-1), index(" JanFebMarAprMayJunJulAugSepOctNovDec",$(NF-2))/3, $(NF-3), $0}' |
sort |
sed 's/[0-9]* //'
있습니다.2공백 " Jan..."
; 이것은 버그가 아닙니다. awk의 색인은 다른 언어처럼 0이 아닌 1에서 시작합니다.
답변2
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