Solución 1:
Eliminar el *
. Como se menciona en las páginas man de rsync, el --delete
La opción no funciona con entradas de comodines.
Usa esto en su lugar:
rsync -a --delete $DIR1/ $DIR2/
"--deleteEsto le dice a rsync que elimine los archivos extraños del lado receptor (los que no están en el lado emisor), pero solo para los directorios que se están sincronizando. Debe haber pedido a rsync que envíe el directorio completo ( por ejemplo, dir
o dir/
) sin usar un comodín para el contenido del directorio (por ejemplo, dir/*
) ya que el shell expande el comodín y, por lo tanto, rsync recibe una solicitud para transferir archivos individuales, no el directorio principal de los archivos. Los archivos que se excluyen de la transferencia también se excluyen de la eliminación a menos que utilice el --delete-excluded
o marque las reglas para que solo coincidan en el lado de envío (consulte los modificadores de inclusión/exclusión en la sección REGLAS DE FILTRO)."
Solución 2:
El motivo es que está llamando a rsync en /tmp/1/b, que no tendrá en cuenta el archivo /tmp/1/a en absoluto.
Su intención parece ser sincronizar el directorio /tmp/1/ -- si usa "/tmp/1/" como fuente en lugar de los archivos individuales, notará que "a" ha sido eliminado del directorio y eliminará del objetivo.
Solución 3:
Si cambia la segunda línea de rsync a rsync -a --delete $DIR1/ $DIR2
(sin el *) funcionará. La razón es que el shell expande el *
a los nombres de archivo en el primer directorio, que es solo b en su caso, por lo que rsync no considerará en absoluto el archivo a que falta, ya que el comando que se ejecuta es en realidad rsync -a --delete $DIR1/b $DIR2
.