¿Hay alguna razón para usar scp en lugar de rsync?

62

¿Hay alguna razón para usar en scplugar de rsync? No veo ninguna razón para scpvolver a usar , rsynchace todo lo que scphace, con más seguridad (puede preservar enlaces simbólicos, etc.).

Mikebloch
fuente
66
Respuesta corta: No. scp nunca es dañino.
Shadur
2
@Shadur scp es dañino porque sobrescribe los archivos de destino existentes de forma predeterminada. Así es rsync, pero al menos permite limitar el posible daño con -u.
Gilles 'SO- deja de ser malvado'
3
@Gilles Al igual que con cualquier herramienta, debe comprender qué hace y cómo lo hace para usarla de manera segura.
Alex Chamberlain
8
En ese contexto, regular cpy rmse consideraría "dañino", y si define "dañino" como "puede fastidiarme si hago algo estúpido", rsyncno es menos dañino.
Shadur
1
En sistemas sin rsyncinstalar, el uso rsync(obviamente) ni siquiera es posible.
Kusalananda

Respuestas:

46

scp proporciona un método similar a cp para copiar archivos de una máquina a una máquina remota a través de una conexión SSH segura.

rsync le permite sincronizar carpetas remotas.

Son programas diferentes y ambos tienen sus usos. scp siempre es seguro, mientras que rsync debe viajar a través de SSH para ser seguro.

Alex Chamberlain
fuente
99
Además, es bastante seguro que rsync debe instalarse en el otro extremo.
ckhan
3
@ckhan, no, puede copiar sin tener nada instalado en el otro lado, será menos eficiente.
mikebloch
2
Me gusta la simplicidad de scp.
Alex Chamberlain
2
@mikebloch ¿Cómo haces eso? ¿Es una nueva característica? Acabo de probar esto usando la versión 3.0.9. y se quejó de que no podía encontrar rsyncen el control remoto.
Alexios
1
@mikebloch, debe instalarse en el servidor para realizar los cálculos de suma de comprobación, lo que puede agregar una gran cantidad de carga de CPU al servidor. Es por eso que la mayoría de los sitios grandes no lo admiten, y por qué zsyncse creó como una alternativa.
psusi
19

Una de las cosas principales (que creo que nadie mencionó) es que si está transfiriendo grandes cantidades de datos o archivos, y si la transferencia se desconecta antes de completarse por cualquier motivo, rsync lo retomará donde lo dejó. Mientras que scp no lo hace.

Yo uso scp si quiero transferir uno o un par de archivos o directorios. Voy a rsync para obtener datos de varios GB.

ravi
fuente
3
Puede valer la pena agregar que la --partialbandera es útil al transferir archivos grandes. rsynccontinuará donde se quedó dentro del archivo en lugar de comenzar ese archivo nuevamente.
Flup
Como @Flup mencionó, rsync no dejará ningún archivo en tránsito para que pueda reanudarlo a menos que use la opción --partial. Estos archivos están ocultos por defecto en el directorio de destino. Puede usar --partial-dir para colocar todos estos archivos en un solo directorio.
Lester Cheung
Bueno, rsync -vP username@host:/path/to/file .haré esto también. Ver esta respuesta en Stackoverflow
Devesh Saini
9

rsync : transfiere deltas (usando su algoritmo de transferencia Delta ) entre:

  1. hosts locales y remotos

scp : transfiere archivos completos entre:

  1. hosts locales y remotos
  2. hosts remotos y remotos

Resumen: scppuede transferir archivos entre dos hosts remotos mientras rsyncno lo admite.

Devesh Saini
fuente
rsync puede transferir archivos entre dos hosts remotos. De hecho, rsync a host:bes equivalente a scp a host:b.
brandizzi
Eso es lo que escribí, rsync puede transferir deltas entre hosts locales y remotos, pero scp no se limita a eso, sino que puede transferir deltas entre dos hosts remotos. @brandizzi
Devesh Saini
2

El usuario Chris en Webhosting Talk escribe:

rsynccompara los archivos en cada extremo y transfiere solo las partes modificadas de los archivos modificados. Cuando transfiere archivos la primera vez, se comporta de manera bastante similar scp, pero para una segunda transferencia, donde la mayoría de los archivos no cambian, generará muchos menos datos scp. También es una forma conveniente de reiniciar las transferencias fallidas: simplemente vuelve a emitir el mismo comando y continuará donde lo dejó el tiempo anterior, mientras scpque comenzará nuevamente desde cero.

nkint
fuente
0

scpes más simple de usar ya que requiere menos argumentos. Cojo myselv usando scp en lugar de rsyncsi solo transfiero un solo archivo. Probablemente soy demasiado vago para definir un alias para rsync ... ;-)

Nils
fuente
1
Hmmm, ¿por qué es así? rsync a host:bes equivalente al scp a host:bmismo número de argumentos.
mikebloch
1
@mikebloch Dos letras más para escribir ... ;-) En el pasado tuve que proporcionar "-e ssh -a" para obtener el resultado correcto. Ahora que "-e ssh" está predeterminado, este podría ser un juego diferente.
Nils
0

Créditos a @tomrunia en https://gist.github.com/KartikTalwar/4393116

rsync -aHAXxv --numeric-ids --delete --progress \
  -e "ssh -T -c [email protected] -o Compression=no -x" \
  [source_directory] user@hostname:[target_directory]/

Preste atención --delete, no lo use si desea mantener archivos extraños en directorios de destino

Jorj
fuente