이전 디렉터리의 파일을 삭제하려면 Rsync를 사용하시겠습니까?

이전 디렉터리의 파일을 삭제하려면 Rsync를 사용하시겠습니까?

나는 rsync 문제에 정말로 갇혀 있고 문서를 읽어도 그것을 알아낼 수 없습니다. 서버의 일부 폴더와 파일을 백업하기 위해 매일 하나씩 7개의 디렉터리를 만들고 싶습니다. 내가 겪고 있는 문제는 rsync가 전날 백업된 디렉터리를 삭제하는 것 같다는 것입니다.

예를 들어...

/backup/Monday에는 내가 이동한 파일이 포함되지만 /backup/Tuesday/ 디렉터리에는 파일과 디렉터리가 모두 포함되지 않습니다.

저는 Monday 디렉토리에 월요일에 존재했던 모든 파일을 포함하고, Tuesday 디렉토리에 화요일에 존재했던 모든 파일을 포함하기를 원합니다.

이것은 내 스크립트입니다.

ssh [email protected] 'find /backup/staging/ -mtime +7 -exec rm -rf {} \;'
crontab -l > $(date +%Y%m%d).crontab
mysqldump -password cherry --all-databases> $(date +%Y%m%d)_cherrydb.sql
rsync -a --log-file=$(date +%Y%m%d).log /var/www/admin /var/www/customers /var/www/UploadedFiles /etc/apache2/certs /etc/apache2/sites-enabled $(date +%Y%m%d).crontab $(date +%Y%m%d)_cherrydb.sql [email protected]:/backup/staging/$(date +%A)/
rsync -a $(date +%Y%m%d).log [email protected]:/backup/staging/$(date +%A)/
rm $(date +%Y%m%d).log
rm $(date +%Y%m%d).crontab
rm $(date +%Y%m%d)_cherrydb.sql

답변1

잘 모르겠지만 스크립트의 첫 번째 줄에 문제가 있는 것 같습니다. 내 생각엔 지난주 백업을 삭제하려는 의도인 것 같지만 이는 위험한 습관입니다. 두 가지 대안은 첫 번째 줄을 다음으로 바꾸는 것입니다.

ssh [email protected] 'rm -rf /backup/staging/$(date +%A)/*'

또는 스크립트의 첫 번째 줄을 제거하고 --delete첫 번째 줄의 플래그를 사용하여 rsync대상에서 백업 세트의 일부가 아닌 모든 파일을 삭제합니다.

답변2

문제는 스크립트의 첫 번째 줄과 명령 자체의 조합입니다 rsync. 어디 보자 ...

find /backup/staging/ -mtime +7 -exec rm -rf {} \;명령은 모든 파일을 삭제합니다그리고 전체 디렉토리 트리파일 또는 디렉터리 트리의 루트가 최소 7일 동안 수정되지 않았습니다.

rsync -a ...파일 및 디렉터리의 수정 시간에 걸쳐 복사할 수 있는 를 사용할 수도 있습니다 .

최종 결과는 find최소 7일 전에 생성된 파일과 디렉터리 트리를 일치시키고 삭제하게 됩니다. 일반적으로 여기에는 /bin/ls거의 확실하게 자체 시스템 파일이 포함됩니다 /. ls -ld /표시된 수정 날짜가 1주일 이상 지난 것인지 확인할 수 있습니다 .

한 가지 해결책은 rsnapshot예약된 백업과 날짜 백업을 매우 잘 관리하는 를 사용하는 것입니다. 또 다른 가능성은 사용하는 것이지만 rsync -a ... --delete전반적으로 나는 그것을 권장합니다 rsnapshot.

자신만의 솔루션을 실제로 출시하려면 다음 명령 쌍을 고려하세요.

find /backup/staging -mtime +7 \! -type d -delete
find /backup/staging -depth -type d -exec rmdir {} + 2>/dev/null

이렇게 하면 7일보다 오래된 디렉터리가 아닌 모든 디렉터리(예: 파일, 장치 노드 등)가 삭제되고 빈 디렉터리도 모두 삭제됩니다.

관련 정보