Unix 쉘 스크립트는 지난 달의 파일을 보관합니다.

Unix 쉘 스크립트는 지난 달의 파일을 보관합니다.

다음과 같은 파일이 포함된 디렉터리가 있습니다.

SLS20160112.001    (20160112 stands for YYYYMMDD)

지난달의 모든 파일을 보관하고 싶습니다. 예를 들어, 다음과 같습니다.

SLS20150201.001
SLS20160107.001
SLS20160130.001
SLS20160201.001

두 파일 모두 이름이 2016년 1월이고 현재 파일이 2016년 2월이므로 SLS20160107.001해당 파일을 보관하겠습니다 .SLS20160130.001

(2016년 2월) 의 경우 SLS20160201.001지난 달의 파일만 보관하고 싶기 때문에 보관하면 안 됩니다. mtime이나 atime이 아닌 파일 이름만 고려할 수 있습니다.

내 현재 논리는 모든 파일을 반복한 다음 지난 달의 파일을 가져온 다음 파일 이름을 파이프로 추출하여 압축하는 것입니다. 그런데 그 부분을 어떻게 해야 할지 모르겠어요.

for file in SLS*; do
   f="${file%.*}"

GET PREVIOUS MONTH FILES AND THEN ECHO

done | tar cvzf SlSBackup_<PREVIOUS_MONTH>.TAR.GZ -T-

답변1

GNU를 사용하면 스위치와 일반 영어 설명을 사용하여 임의의 날짜를 얻을 date수 있습니다 . -d예를 들어, date -d "one month ago". 따라서 우리는 다음과 같이 작업할 수 있습니다.

FILESPEC="SLS$(date -d "1 month ago" +"%Y%m")??.001"
LASTMONTH="$(date -d "1 month ago" +"%m")"
IFS=

tar cvzf "SlsBackup_${LASTMONTH}.tar.gz" $FILESPEC

다행스럽게도 2017년 1월에 실행하면 2016년 12월 파일을 올바르게 백업할 만큼 똑똑합니다.

관련 정보