如何從檔案中進行 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/

相關內容