rsync로 중복 파일 삭제


5

여기에,

서버에 50GB 크기의 폴더가 있으며 60000 이상의 파일이 들어 있습니다. rsync를 사용하여 미러 서버로 전송했으며 파일의 거의 절반이 전송되었습니다. 이제 주 서버에서 전송 된 파일을 삭제하고 싶습니다.

rsync 로이 작업을 수행 할 수 있습니까? 도움말을 읽고 --delete 옵션을 찾았지만 이러한 파일은 매우 중요하므로 전문가의 의견에 감사드립니다.


-n먼저 옵션 으로 "드라 이런"을 수행하십시오 . 또한 백업은 좋은 생각입니다.
Paul R

나는 rsync"전송 후 소스에서 삭제"를 믿지 않습니다 . 그러나 파일 배치를 전송 한 다음 성공적인 전송을 확인한 후 삭제하는 스크립트를 작성할 수 있습니다.
twalberg

답변:


5

rsync (버전 3.0.9로 확인)에는 해당 기능을 수행하는 옵션이 --remove-source-files있습니다. 전송 된 파일 만 삭제하고 아직 전송되지 않은 추가 파일은 전송하지 않으려면`--existing '옵션을 추가로 사용해야합니다.

불행히도 rsync는 옵션 --verbose --itemize-changes --stats을 사용 하더라도 삭제하는 파일을 출력하지 않는 것 같습니다 .

# create source and target dirs
mkdir /tmp/source
mkdir /tmp/target
# create a test file in source
touch /tmp/source/test
# rsync source and target
rsync --archive --itemize-changes --verbose --stats /tmp/source/ /tmp/target
# verify that test has been copied to target
[ -f /tmp/target/test ] && echo "Found" || echo "Not found"
# create another file in source
touch /tmp/source/test2
# delete files on source which are already existing on target
rsync --archive --itemize-changes --verbose --stats --remove-source-files --existing /tmp/source/ /tmp/target
# verify that test has been deleted on source
[ -f /tmp/source/test ] && echo "Found" || echo "Not found"
# verify that test2 still exists on source and was not transferred to target
[ -f /tmp/source/test2 ] && echo "Found" || echo "Not found"
[ -f /tmp/target/test2 ] && echo "Found" || echo "Not found"

1

이전에 작성된 것처럼 rsync는 소스에서만 대상에서 삭제되지 않습니다.

귀하의 경우 미러 서버에서 파일의 MD5 해시를 생성 한 다음 기본 서버에서 해시가 올바른지 확인하고 해당 파일을 제거합니다.

즉 :

mirror$ find . -type f -print0 | xargs -0 md5sum > mirror.md5

.. mirror.md5를 기본 서버로 전송 ...

primary$ md5sum -c mirror.md5

FAILED 파일이 있는지 확인한 다음 성공적으로 전송 된 파일을 제거하십시오. 다음과 같이 자동화 할 수 있습니다.

md5sum -c mirror.md5 | grep 'OK$' | sed -e 's/: OK$//' | while read FILE; do rm "$FILE"; done

이것은 좋은 해시로 모든 파일을 필터링하고 md5sum에서 'OK'부분을 잘라 내고 파일을 하나씩 제거합니다.

말할 것도없이 rsync에서 --delete 옵션을 사용하여 파일의 후반부를 전송하고 싶지 는 않습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.