使用时,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/