rsync 일치하는 파일만 삭제

rsync 일치하는 파일만 삭제

rsync(또는 다른 프로그램)를 사용하여 디렉터리 간에 동일한 파일을 삭제하려면 어떻게 해야 합니까? 동일하려면 위치와 메타데이터가 일치해야 합니다(권한, 소유권, 타임스탬프).

예를 들어, X 디렉터리를 Y로 백업합니다. 시간이 지나면 X에 파일이 추가되고 제거됩니다.

Y에서 동일하게 일치하는 모든 파일/디렉토리를 X에서 제거하고 싶습니다. X에서 다른 파일을 건드리지 마십시오.

참고: 저는 jdupes에 익숙하지만 동일한 파일만 삭제하려는 것은 아닙니다. 디렉터리 위치와 파일 이름이 동일한 파일을 삭제하고 싶습니다.

답변1

cd /path/to/X
find -type f -exec ls -l {} \; > /tmp/LIST # Get a list of all files in X
cd /path/to/Y
find -type f -exec ls -l {} \; >> /tmp/LIST # Get a list of all files in Y (combine with list from X)
cd /tmp
sort LIST > SORT # Sort all listed
uniq -d SORT > DUP # Exclude files that aren't listed twice
cd /path/to/X
cat /tmp/DUP | xargs -d '\n' rm # Delete all files listed as duplicate
find -type d -empty -delete # Optional, delete all empty directories

경고-

이 솔루션은 의 출력을 사용하여 파일을 비교하므로 ls -l메타데이터 날짜+시간+소유자+권한+파일 이름을 비교하고 파일 내의 바이트는 비교하지 않습니다. 또한 이름에 개행 문자가 포함된 파일은 안전하지 않습니다.

관련 정보