3일보다 오래된 백업을 삭제하는 방법을 스크립트에 추가하려고 합니다.
제거된 부분만 남겨두고 아래에서 제거된 버전을 참조하세요.
내가 이해한 바에 따르면 ${BACKUP_DEST[$i]}/$OLDBACKUP
출력은 "/Users/christopherdavies/Desktop/rsync/test1.co.uk/07-06-18"과 같아야 합니다.
하지만 실행될 때마다 위의 "test1.co.uk" 폴더가 3일 동안 존재했는지 여부에 관계없이 삭제됩니다.
누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 아무런 진전도 이루지 못했습니다... 새로운 눈이 되었나요?
#!/bin/sh
WEBSITE_HOST=(
"[email protected]"
"[email protected]"
)
BACKUP_DEST=(
"/Users/christopherdavies/Desktop/rsync/test1.co.uk"
"/Users/christopherdavies/Desktop/rsync/test2.co.uk"
)
OLDBACKUP=`date -d "3 days ago" +"%d%m%Y"`
SITE_COUNT=${#WEBSITE_HOST[@]}
for (( i = 0; i < SITE_COUNT; i++ )); do
# Remove old backups
if [ -d "${BACKUP_DEST[$i]}/$OLDBACKUP" ]; then rm -Rf ${BACKUP_DEST[$i]}/$OLDBACKUP; fi
done
exit 0
답변1
macOS의 유틸리티 date
(사용자의 홈 디렉터리 위치로 판단하여 사용하고 있다고 가정)는 GNU가 아니므 date
로 모든 기능을 지원하지 않습니다.
이는 OLD_BACKUP
변수가 비어 있음을 의미합니다(실행 시 오류 메시지가 표시되어야 함 date
). 이는 해당 ${BACKUP_DEST[$i]}
디렉터리가 삭제되었음을 의미합니다.
대신에 date -v -3d +'%d-%m-%Y'
.
#!/bin/bash
set -e
backup_dest=(
'/Users/christopherdavies/Desktop/rsync/test1.co.uk'
'/Users/christopherdavies/Desktop/rsync/test2.co.uk'
)
when=$( date -v -3d +'%d-%m-%Y' )
for backup in "${backup_dest[@]}"; do
[ -d "$backup/$when" ] && rm -Rf "$backup/$when"
done
또는 GNU coreutils를 설치하고 GNU 를 사용하세요 date
.
코드에 대한 추가 변경사항:
exit 0
끝에서 제거하고 추가하세요set -e
. 스크립트가 실패하면 이를 확인할 수 있어야 합니다.사이트 배열이 사용되지 않습니다.
인덱스를 사용하는 대신 배열의 항목을 반복하면 읽기가 더 쉬워집니다.
한 줄의 간단한 명령문을 원할 경우
if
단축 구문(더 짧음)을 사용할 수 있습니다.소문자 변수 이름을 사용하십시오.
변수 확장은 항상 인용됩니다.
이것은 스크립트이므로 -라인 에 인용
bash
해야 합니다 .bash
#!