다음과 같은 파일이 포함된 디렉터리가 있습니다.
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월 파일을 올바르게 백업할 만큼 똑똑합니다.