ファイルから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/

関連情報