반응형
리눅스 쉘 스크립트에서 date 함수를 자주 쓰게 됩니다. date 함수 사용 중 지난달을 구하고 싶은데, 윤달이나 31일에는 어떻게 해야되는지 난감할 때가 있습니다. 지난달을 YYYYMM과 같은 형태로 찾는 법을 알아보겠습니다.
지난달 찾기 목차
1. date 1 month ago의 문제점
2. 지난달 찾기 스크립트
1. date 1 month ago의 문제점
// 일반적인 지난달 구하는 법
date +%Y%m -d '-1month'
date +%Y%m -d '1 month ago'
위 방법은 YYYYMMDD의 날짜형식에서 MM만 -1 해주는 방법입니다.
따라서 지난달이 짧은 3월 29,30,31일이나 지난달이 30일까지 있는 31일에는 아래와 같이 오작동할 수 있습니다.
// 2022년 2월 28일까지 있음
date +%Y%m%d -d '-1month' 수행 시
20220329 -> 20220301 // 2022.02.29는 없으니 28일에서 1일이 더해짐
20220330 -> 20220302
20220331 -> 20220303
20221231 -> 20221201
1일~28일에 수행할 경우 아무 문제가 없지만,
만약 매일 지난달 이름의 폴더를 검색해야 한다면? YYYYMM을 찾을 다른 방법을 찾아야 합니다.
2. 지난달 찾기 스크립트
// 기본형태 우선 수행
YYYYMM=`date +%Y%m -d '-1month'`
// 지난월 조정(29~31일 수행된 경우)
// 오늘날짜 >= 29 AND 오늘날짜와 -1month의 날짜가 같지 않을때
if [ `date +%d` -ge 29 ] && [ `date +%d` -ne `date +%d -d '-1month'` ];
then
// 차이나는 일수를 계산해서 한번 더 빼줌
diff=`date +%d -d '-1month'`;
YYYYMM=`date +%Y%m -d "-1month -${diff}day"`;
fi
조금 복잡해보일 수 있습니다만 찬찬히 보면 별거없습니다.
지난달이 30일까지 있는 31일의 경우는 -1day를 추가해주기만 하면 되는데
오직 28일까지 있으며 윤달까지 있는 2월을 위해 길어졌습니다.
위 스크립트는 1년 중 언제 수행되더라도 지난달을 찾을 수 있습니다.
'IT' 카테고리의 글 목록
IT, 육아, 게임, 생활정보 등 각종 컨텐츠 노트 겸 공유
studyingazae.tistory.com
그냥 1~28일에 수행되게 하는게 속 편하긴 합니다.
그리드형
'IT > Linux' 카테고리의 다른 글
[Linux] 심볼릭 링크_바로가기 파일 만들기(ln 명령어) (0) | 2022.06.13 |
---|---|
[Linux] 원격 로컬간 파일 업 다운로드(scp 명령어) (0) | 2022.05.26 |
[LINUX] 여러 파일 및 폴더 압축/압축해제 명령어 (zip, tar) (0) | 2022.03.23 |
[Linux] 서버 용량 확인 (df, du 명령어: 서버 상태 체크) (4) | 2022.03.19 |
[LINUX] 리눅스 SFTP 파일 업로드/다운로드 (0) | 2021.12.28 |
댓글