파일에서 rsync를 수행하고 대상에서 불필요한 파일/디렉터리를 삭제하는 방법

파일에서 rsync를 수행하고 대상에서 불필요한 파일/디렉터리를 삭제하는 방법

사용 시 rsync --files-from=$FILE파일에 나열되지 않은 대상의 모든 파일과 디렉터리를 삭제하고 싶습니다.

예를 들어

mkdir /tmp/sync
cd /tmp/sync
mkdir left right
touch left/only_left right/only_right
echo /tmp/sync/left/only_left > tosync
rsync \
  --dry-run \
  --itemize-changes \
  --files-from=/tmp/sync/tosync \
  --progress \
  --human-readable \
  --prune-empty-dirs \
  --delete-after \
  --inplace \
  / /tmp/sync/right/

출력

cd+++++++++ tmp/
cd+++++++++ tmp/sync/
cd+++++++++ tmp/sync/left/
>f+++++++++ tmp/sync/left/only_left

그리고 find /tmp/sync/right출력

find right/
right/
right/only_right
right/tmp
right/tmp/sync
right/tmp/sync/left
right/tmp/sync/left/only_left

그러나 나는 "only_right"가 삭제될 것으로 예상하지만 그렇지 않습니다. 어떻게 작동하나요?

답변1

rsync는 디렉터리 내용을 반복적으로 비교할 때 대상 전용 파일을 삭제합니다.

그런 다음 소스 디렉터리에 상대적인 'tosync' 파일이 필요합니다.

귀하의 예를 바탕으로 필요한 동작을 얻으려면 다음이 작동합니다.

echo 'only_left' > /tmp/sync/tosync

rsync --dry-run --itemize-changes \
--delete --recursive \
--include-from=/tmp/sync/tosync \
--exclude=* /tmp/sync/left/ /tmp/sync/right/

관련 정보