¿Cómo se puede sincronizar un archivo y eliminar archivos/directorios superfluos en el destino?

¿Cómo se puede sincronizar un archivo y eliminar archivos/directorios superfluos en el destino?

Al usarlo, rsync --files-from=$FILEme gustaría eliminar todos los archivos y directorios del destino que no figuran en el archivo.

p.ej

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/

salidas

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

y find /tmp/sync/rightsalidas

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

Sin embargo, espero que se elimine "only_right", lo cual no es así. ¿Cómo funciona?

Respuesta1

rsync eliminará archivos de solo destino al comparar recursivamente el contenido de los directorios.

Luego necesita que los archivos en 'tosync' sean relativos al directorio de origen.

Basándose en su ejemplo, para obtener el comportamiento que necesita, esto 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/

información relacionada