Respuestas:
La razón por la cual su comando no funciona se explica en la página del manual para rsync (énfasis agregado):
--Eliminar
Esto 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 haberle pedido a rsync que envíe todo el directorio (por ejemplo, "dir" o "dir /") sin usar un comodín para el contenido del directorio (por ejemplo, "dir / *") ya que el comodín expande el comodín y rsync obtiene un 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 ser eliminados a menos que use la opción --delete-excluded o marque las reglas como solo coincidentes en el lado de envío (consulte los modificadores de inclusión / exclusión en la sección REGLAS DE FILTRO).
Por lo tanto, cuando corres
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
los archivos no deseados en DEST no se eliminan porque en realidad no ha pedido que se sincronice un directorio, sino solo un puñado de archivos específicos. Para obtener los resultados que desea, intente algo como esto:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Tenga en cuenta que el orden de las directivas de inclusión y exclusión es importante. Esencialmente, cada archivo se compara con los patrones de inclusión o exclusión en el orden en que aparecen. Por lo tanto, los archivos con extensiones .jpg o .txt se sincronizan ya que coinciden con los patrones "incluidos" antes de que coincidan con el patrón "*" excluido. Todo lo demás está excluido por el --exclude '*'
patrón. La --delete-excluded
opción garantiza que incluso los archivos excluidos en el lado DEST se eliminen.
--delete-excluded
. Sin ella, solo *.jpg
y *.txt
se puede eliminar en el lado de destino. Con él, los archivos no relacionados también se eliminarían. Puede interesarle este tutorial sobre filtros rsync .