Al usarlo, rsync --files-from=$FILE
me 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/right
salidas
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/