No se pueden copiar archivos específicos con rsync a través de SSH

3

Estoy tratando de sincronizar todos los archivos PHP a otra computadora a sshtravés de rsync. Sin embargo, nunca copia ningún archivo. Estoy en Mac OSX Mountain Lion (10.8.4)

Esto es lo que he intentado:

rsync --rsh=ssh --verbose --remove-source-files --recursive --exclude=* --include='*.php' $HOME/ pi@raspberrypi:~

building file list ... done
sent 36 bytes  received 20 bytes  112.00 bytes/sec
total size is 0  speedup is 0.00

o

rsync --verbose --remove-source-files -e "ssh" $HOME/*.php pi@raspberrypi:~
rsync: link_stat "/Users/simonjackson/*.php" failed: No such file or directory (2)

sent 21 bytes  received 20 bytes  82.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]

Tiene alguna idea sobre esto?

simonwjackson
fuente

Respuestas:

1

La sintaxis correcta sería:

rsync --include="*.php" --filter="-! */" source dest

El problema con una exclude="*"regla normal es que excluiría todo, incluso los directorios, por lo que no podría incluir nada porque todos los archivos y carpetas se excluirían nuevamente, ¿tiene sentido?

Para explicar la --filterregla aquí, mira la página del manual:

A !especifica que la inclusión / exclusión debe tener efecto si el patrón no coincide. Por ejemplo, "-! */"excluiría todos los no directorios.

Esto es exactamente lo que queremos aquí, ya que queremos excluir todos los demás archivos, simplemente.

También ten en cuenta que --exclude=*solo funciona en algunos shells, Bash por ejemplo. En Zsh, intentaría expandirse *antes de ejecutar el comando. Eso significa que rsyncobtiene la lista de inclusión / exclusión incorrecta. Por lo tanto, para estar seguro, siempre cite los patrones para evitar que se expandan prematuramente.

Para más información, consulte: Trucos con reglas de filtro rsync

slhck
fuente