Como pode um rsync de um arquivo e excluir arquivos/diretórios supérfluos no destino

Como pode um rsync de um arquivo e excluir arquivos/diretórios supérfluos no destino

Ao usar, rsync --files-from=$FILEgostaria de excluir todos os arquivos e diretórios do destino que não estão listados no arquivo.

por exemplo

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/

saídas

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

e find /tmp/sync/rightsaídas

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

No entanto, espero que "only_right" seja excluído, o que não é. Como isso funciona?

Responder1

O rsync excluirá os arquivos somente de destino ao comparar recursivamente o conteúdo dos diretórios.

Em seguida, você precisa que os arquivos em 'tosync' sejam relativos ao diretório de origem.

Com base no seu exemplo, para obter o comportamento necessário, isso funciona:

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/

informação relacionada