rsync --delete는 소스 디렉터리를 유지하고 파일을 대상 디렉터리와 동기화하기 위한 올바른 구문을 완전히 이해합니다.

rsync --delete는 소스 디렉터리를 유지하고 파일을 대상 디렉터리와 동기화하기 위한 올바른 구문을 완전히 이해합니다.

나는 다음 명령을 실행하고 있습니다 :

rsync -av --dry-run /home/acnt/public_html/_private/database/static/categories/temp/ --delete-after /home/acnt/public_html/_private/database/static/categories/

많은 테스트에서 임시 디렉토리를 유지하지 않고 모든 파일과 전체 디렉토리 트리 및 카테고리 트리 아래의 다른 모든 디렉토리를 삭제합니다.

/home/acnt/public_html/_private/database/static/categories/
/home/acnt/public_html/_private/database/static/categories/temp
/home/acnt/public_html/_private/database/static/categories/dir1
/home/acnt/public_html/_private/database/static/categories/dir1/temp
/home/acnt/public_html/_private/database/static/categories/dir2
/home/acnt/public_html/_private/database/static/categories/dir2/temp

이 디렉토리를 카테고리 아래에 유지하고 싶지만 구문이 정확하지 않습니다.

내가 원하는 것은 임시 디렉토리의 내용을 /home/acnt/public_html/_private/database/static/categories/temp/찾을 수 없는 파일과 /home/acnt/public_html/_private/database/static/categories/동기화하고 삭제하는 방법 입니다./home/acnt/public_html/_private/database/static/categories//home/acnt/public_html/_private/database/static/categories/temp/

이런 방식으로 rsync를 사용할 수 있는지, 아니면 여기서 트리 구조가 문제인지 궁금합니다.

답변1

문제는 대상 디렉토리입니다포함하다소스 디렉토리. 소스 디렉터리는 대상 디렉터리 계층 구조의 일부이기 때문에(그리고 분명히 포함되지 않기 때문에) 수정(삭제)되고 있습니다.그 자체).

이 문제를 해결하려면 (소스 디렉터리)를 (대상 디렉터리) .../categories/temp가 아닌 다른 위치 로 이동하는 것이 좋습니다. .../categories이렇게 하면 소스 디렉터리가 대상 계층의 일부이므로 수정되지 않습니다.

답변2

temp대상 내부의 디렉터리에서 복사하려는 경우 rsync대상에서 해당 하위 트리를 삭제하지 않도록 지시해야 합니다.

이 경우 제외된 디렉토리 트리는 temp대상 트리의 맨 위에 있으므로 접미사가 있는 파일이 아닌 디렉토리를 제외하려는 /temp경우 최종 제외는 가 됩니다 .rsync//temp/

base=/home/acnt/public_html/_private/database/static/categories
rsync --dry-run -av --delete-after --exclude '/temp/' "$base/temp/" "$base/"

$base솔루션이 더 명확해지도록 경로를 짧게 유지하는 데 사용합니다 .

관련 정보