Estoy tratando de usar la --delete
opción rsync
para eliminar archivos en el directorio de destino que no está presente en el directorio original
Aquí está el comando que estoy usando:
rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www
Entonces mi pregunta es, ¿cómo puedo eliminar todos los archivos en el directorio de destino que no están presentes en el directorio original?
--recursive
es sobreabundante porque la opción-a
ya lo incluyeSu comando no funcionaba porque cuando lo usaba
/var/www/*
como fuente, su shell realizaba un bloqueo global, es decir, la shell se expandía*
a todos los archivos en ese directorio y copiaba los archivos uno por uno, por lo que aquí los archivos individuales se han convertido en las fuentes en lugar de el directorio padreEntonces, si lo usa
/var/www/*
, entonces no necesita la--recursive
opción, ya que*
hará que los archivos se copien (junto con cualquier directorio con su contenido), no el directorio principal que contiene los archivos. Debido a la misma razón--delete
no funciona, ya--delete
que eliminará los archivos del directorio de destino que no están en el directorio de origen , pero está copiando archivos para que no se eliminen los archivos (se espera).Esto te hará más claro:
Como puede ver, he usado la fuente,
/foo/*
por lo tanto, elrsync
comando que se ejecuta escon
*
hacer shell para expandirlo y crear todos los archivos individualmente como argumentos de origen, no el directorio padre en su conjunto (y tampoco es necesario--recursive
en este caso).Entonces, si quieres hacer el
--delete
trabajo, ejecútalo como:fuente