소스 폴더에서 삭제 된 rsync 삭제 파일을 만들려면 어떻게합니까?


194

최근 게임 서버를 호스팅하기 위해 Ubuntu Server가있는 머신을 설정했습니다. 각 게임 서버마다 백업 플러그인을 설치하여 컴퓨터의 특정 폴더에 게임 월드 파일을 자주 백업합니다. 또한 옵션 cron과 함께 rsync를 사용하여 매일 밤 해당 백업을 Dropbox 폴더에 자동으로 복사 하는 작업을 설정했습니다 -a.

몇 달 후 Dropbox 계정이 저장 용량 한도에 도달하여 너무 많은 백업을 유지할 수 없다는 것을 깨달았으므로 너무 많은 백업을 유지하지 않도록 게임 서버 백업 플러그인을 구성한 다음 며칠 동안 기다릴 것인지 확인했습니다. 주 단위로 예정된 이전 백업을 삭제하십시오. 백업 플러그인은 결국 작업을 수행하고 이전 백업을 삭제했기 때문에 rsynccron 태스크가 소스 폴더와 일치하도록 Dropbox 폴더에서 이전 백업을 삭제해야했지만 그렇게하지 않았습니다. 그래서 몇 가지 질문이 있습니다.

  • 기본적으로 않습니다 rsync추가 소스 폴더에 추가 된 대상 폴더에 파일 및 변경 소스 폴더에 변경된 파일을하지만 삭제하지 소스 폴더에서 삭제 된 파일을?

  • 이 경우 가장 좋은 방법은 무엇 rsync입니까? 대상 폴더가 소스 폴더를 완벽하게 반영하기를 원하므로 소스 폴더에서 삭제 된 파일을 삭제해야합니다.

rsync트릭을 수행 할 수 있는 매뉴얼 페이지에 나열된 옵션이 있지만 익숙하지 않기 때문에.

답변:


227

대상에서 파일을 삭제하려면 --delete명령에 옵션을 추가하십시오 . 예를 들면 다음과 같습니다.

rsync -avh source/ dest/ --delete

15
소스가 디렉토리인지 확인하십시오. 사용 source/* dest/이 작동하지 않습니다.
Tom Saleeba

3
"IO 오류가 발생했습니다-파일 삭제 건너 뛰기"라는 오류로 인해 해당 이벤트가 --delete있거나 --delete-after삭제되지 않습니다. 이 추가 --ignore-errors옵션 을 해결 하고 오류를 개별적으로 디버그하려면
MHT

12
완벽하게 작동합니다! 작동하지만 , 특히 다음과 같은 옵션 ( ) 과 관련하여 -n, --dry-run실행하기 전에 항상 옵션을 사용하는 것이 좋습니다 . 가능한 두통을 피할 것입니다 :). rsync--delete
ivanleoncz

2
@MHT : 귀하의 의견이 없으면 답변이 완전한 것으로 보이지 않습니다.
Lonnie Best

2
@TheBicentennialMan이 -a 암시합니다 -r .
x-yuri

45

에 rsync 당신은 몇 가지 옵션을 사용하는 동안 명령은 늘 모든 파일을 삭제 delete하는 명령. 따라서 소스에 추가 된 파일이나 폴더가 있으면 삭제하지 않고 대상에 동기화됩니다.

rsync소스 파일에서 백업하고 파일 find ... rm크기 또는 기간 동안 파일을 삭제 하는 데 사용 하는 것이 좋습니다 .

rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;

위의 코드 블록은 소스에서 백업 한 다음 마지막 수정 시간이 2 개월 이상인 모든 파일을 삭제합니다.

최신 정보

delete옵션이 TARGET에만 있다는 것을 알았 으므로 소스에서 일부 파일을 제거하면 TARGET에서 rsync --delete제거하십시오. 그리고 delete에 의해 옵션 afterbefore그 사람의 페이지에서 언급 한 바와 같이 :

--delete-before         receiver deletes before transfer, not during

다음을 의미합니다.

  1. rsync는 소스에서 제거 된 TARGET에서 파일을 삭제합니다.
  2. rsync는 파일 동기화를 시작합니다.

--delete-after receiver deletes after transfer, not during

다음을 의미합니다.

  1. rsync는 파일 동기화를 시작합니다.
  2. rsync는 TARGET에서 동기화 후 SOURCE에서 제거 된 파일을 삭제합니다.

참고 : --delete-{before/after}TARGET의 기계.


1
답장을 보내 주셔서 감사합니다!! rsync에 대한 "삭제"옵션을 참조하고 있습니까? rsync에 "삭제"옵션을 사용할 수없는 이유는 무엇입니까?
user254251

@ user254251, delete를 사용하면 rsync 명령이 즉시 파일을 삭제합니다. 그러나이 경우 오류가 더 많은 시간이 있습니다.
shgnInc

올바르게 이해하면 오류를 피하기 위해 삭제 작업을 rsync 작업과 분리해야한다고 말하고 있습니다. 그래도 질문이 있습니다. rsync 매뉴얼 페이지에는 복사 작업 전후에 삭제 작업을 실행하여 분리 작업을 수행 할 목적으로 나타나는 일부 옵션이 나열되어 있습니다. 예를 들어 --delete-before와 --delete-after라는 두 가지 옵션이 있습니다. 이 옵션을 사용한 rsync가 설명한 방법과 동일한 효과를 줍니까? 매뉴얼 페이지에서 각 옵션에 대한 자세한 설명을 읽었지만 이해할 수없는 설명에 일부 정보가 있습니다.
user254251

@ user254251, 답변이 업데이트되었습니다. rsync의 시간 제한으로 TARGET에서 파일을 삭제하는 방법이 있는지 모르겠습니다 .
shgnInc

감사! 따라서 단순히 --delete-before 옵션을 사용하면 오류로부터 안전하다고 생각합니까? 시간 초과를 지정하지 않으므로 rsync 삭제 단계가 전송 단계를 지연시키는 경우 걱정할 필요가 없습니다. rsync는 하루에 한 번 실행되며 다음 동기화 전에 백업 파일을 동기화하는 데 많은 시간이 소요되므로 동기화 시간을 제한 할 필요도 없습니다.
user254251

6

이 명령은 증분 데이터를 복사하여 원격 서버와 동기화 상태를 유지합니다.

  1. 증분 데이터 만 복사합니다.
  2. 소스에서 데이터가 삭제되면 삭제됩니다.
  3. 대상에서 삭제 된 데이터가 있으면 소스에서 다시 복사합니다.
  4. 기본적으로이 명령은 두 환경을 동기화 상태로 유지합니다.

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

예:

rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup

2
-W는 증분 데이터 만 복사하지 않고 항상 전체 파일을 복사한다고 생각합니다.
Tulains Córdova

이 명령을 실행하여이 오류가 발생했습니다. rsync: Failed to exec --delete-before: No such file or directory (2)
Jeff Tian

1

오류가 rsync와의 scync 중에있는 경우, rsync를 제대로 사용한 경우에도, 그것은이 있어야 파일을 삭제하지 않을 것이다 --delete, --delete-after또는 --delete-before.

이것이 rsync 오류를 해결하는 것이 중요한 이유입니다.

내 오류의 대부분은 --perms비 Linux 파일 시스템과 동기화하는 동안 옵션 을 사용했기 때문에 발생했습니다 . 내가 대체하는 경우 --perms--no-perms, 이러한 오류는 멀리 가서 다음 일을 삭제할 수 있습니다.

--permsLinux 파일 시스템에서 다른 Linux 파일 시스템으로 동기화 할 때 문제가 없지만 Linux에서 NTFS가 아닌 파일 시스템 (NTFS, FAT 등)으로 동기화하는 경우 rsync에서 Linux 권한을 설정할 수--perms 없기 때문에 오류가 발생 합니다 비 리눅스 파일 시스템 . 다시, 오류 = 삭제 없음.

- 비 리눅스 파티션에 동기화 할 때, 내가 사용 --no-perms하는 파괴 이러한 오류를 방지하기 위해 --delete, --delete-after또는 --delete-before.

그 후에도 여전히 오류가 발생하고 이러한 오류가 발생하는 방법을 알 수없는 경우 동기화되지 않은 파일 삭제 전용 명령을 실행할 수 있습니다.

sudo rsync -r --delete --existing --ignore-existing --ignore-errors --progress /path/to/source/ /path/to/destination

위의 명령은 동기화되지 않은 파일을 삭제하지만 파일을 동기화하지는 않습니다. 따라서이 후에 다시 동기화해야합니다. 이 명령은 인수를 추가 한 것을 제외 하고는 이 답변을 기반으로 --ignore-errors하므로 오류가 있어도 삭제됩니다.


1
팁 고마워! 5 년 전이 질문의 최초 저자입니다. 가까운 시일 내에 NTFS 드라이브와의 동기화를 설정하려고했으며, "-a"옵션을 사용할 계획이므로 권한 오류가 발생했을 수 있습니다. rsync-권한을 동기화합니다 (다른 것들 중에서). 그래서 저는 노트에 "--per-perms"를 추가했습니다. 이제 rsync -a --no-perms --delete-before를 사용할 계획입니다. 질문이 있습니다 : 동기화하기 전에 삭제를 실행하여 파일 삭제 문제를 피하기 전에 --delete-t? 그것이 그 목적이라고 생각했습니다.
user254251

@ user254251-확실하지 않습니다. 나는 그것이 "얼마나 일찍 삭제"하는가에 달려 있다고 생각합니다. 삭제가 시작되기 전에 하나의 오류가 발생하면 나사를 조이십시오. 내 조언은 당신이 엉덩이에 날카로운 고통을 좋아하지 않는 한 NTFS를 피하는 것입니다. NTFS에서 NTFS로 제대로 작동합니다. NTFS to Linix는 정상적으로 작동합니다. "Linux 파일 시스템"을 "Non-Linux 파일 시스템"으로 피하십시오. 작품을 올바르게 삭제하는 것은 너무 고통 스럽습니다. 이것을 달성 할 수는 있지만 대상 드라이브를 EXT4로 포맷하는 것보다 문제가되지 않기로 결정했습니다.
Lonnie Best
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.