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에 존재하지 않는다는 오류 메시지가 나타납니다. 두 번째 명령은 대상의 빈 폴더를 삭제합니다.