재귀적 비교 및 ​​삭제(rsync 또는 해싱 필요 없음)

재귀적 비교 및 ​​삭제(rsync 또는 해싱 필요 없음)

나는 rsync를 사용하여 폴더를 동기화해 왔으며 훌륭하게 작동합니다. 문제는 최근에 더 큰 파일이 들어 있는 폴더를 동기화하기 시작했는데 (해시 비교로 인해) 원하는 것보다 시간이 훨씬 오래 걸린다는 것입니다. cp 명령이 -u 옵션을 호출하여 rsyncs 작업의 일부를 더 빠르게 수행할 수 있다는 것을 알았습니다. 즉, 이 방법을 사용하면 소스의 최신 파일을 대상에 쉽게 추가할 수 있습니다.

하지만 내가 알아내야 할 것은 rsync 할당의 두 번째 부분인데, 이것이 유용하다고 생각했습니다. 다음은 모든 폴더의 파일 목록을 재귀적으로 비교하고 소스에는 더 이상 없지만 대상에는 여전히 있는 파일을 삭제하는 명령입니다(그러나 모든 파일에 대해 해시를 수행하지 않고 예를 들어 ls 명령을 사용하면 충분합니다) 필요).

가능합니까?

답변1

이렇게 하면 폴더 간의 차이점이 제거되는 것처럼 보입니다.

diff -awr folderA folderB | sed 's/Only in //;s/: /\//' | while read f; do echo "removing ${f}"; done;

A의 차이점을 제거하고 B의 차이점을 제거하려면 다음과 같이 grep을 추가할 수 있습니다.

diff -awr folderA folderB | sed 's/Only in //;s/: /\//' | grep "^folderA/" | while read f; do echo "removing ${f}"; done;

이를 위해서는 명령에 폴더A를 두 번 입력해야 합니다.

실제로 실행하려면 echo "removing ${f}";다음으로 바꾸십시오.rm -f "${f}";

답변2

당신은 참조 할 수 있습니다이 링크이 링크. rsync에는 .rsync에 존재하지 않는 폴더를 삭제하는 기능이 있습니다 live ENV.

rsync -av --delete

관련 정보