나는 다음 명령을 실행하고 있습니다 :
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
솔루션이 더 명확해지도록 경로를 짧게 유지하는 데 사용합니다 .