이전 디렉토리 삭제

이전 디렉토리 삭제

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#!

관련 정보