rsync를 사용하여 소스에서 찾은 대상의 파일 삭제

rsync를 사용하여 소스에서 찾은 대상의 파일 삭제

rsync원본에 있는 파일을 이용하여 대상에 있는 모든 파일을 삭제하는 방법이 있는지 궁금합니다. 소스에 30개 이상의 디렉터리가 있고 대상에 100개 이상의 파일이 있습니다.

대상에서 30+를 재귀적으로 삭제하고 rsync이 작업을 수행하는 데 도움이 될 수 있는 다른 것이 있는지 궁금합니다.

원천

a/
b/
c/

목적지

a/
abc/
xyz/
b/
c/
...

답변1

나는 이것이 그렇게 될 것이라고 생각하지 않지만 rsync, 파일 목록을 만들고, 그 목록을 수정하고, 스크립트로 대상에 복사할 수 있습니다.

파일 이름에 줄바꿈이나 작은따옴표( ')가 포함되어 있지 않다고 가정하고 소스 머신에서 다음 명령을 실행합니다.

cd basedir
find . -type f | sed 's/^/rm -f '\''/' | sed 's/$/'\''/' > /var/tmp/to_remove

그런 다음 파일을 to_remove대상 시스템의 cd기본 디렉터리에 복사하고 가져옵니다. 존재하지 않지만 목록에 있는 파일은 아무런 영향을 미치지 않으며, 대상에서만 사용 가능한 다른 파일은 건드리지 않습니다.

디렉터리도 삭제하려는 경우 추가 디렉터리를 사용할 수 있지만 이렇게 하면 디렉터리에서 파일이 삭제되었는지 여부에 관계없이 소스에 존재하고 대상에 비어 있는 디렉터리가 삭제됩니다.

find . -depth -type d | sed 's/^/rmdir -f '\''/' | sed 's/$/'\''/' > /var/tmp/to_remove

답변2

cd a
find . -type f -print0 | ssh ${server_name} "cd $path_to_b;cat | xargs -0 rm"
ssh ${server_name} "find ${path_to_b} -empty -type d -delete"

a의 파일이 b에 존재하지 않는다는 오류 메시지가 나타납니다. 두 번째 명령은 대상의 빈 폴더를 삭제합니다.

관련 정보