sftp: carga todos los archivos, directorios y subdirectorios contenidos en una carpeta

27

En la máquina AI tengo la carpeta

/home/a/

En la máquina BI tengo la carpeta

/home/b/

Deseo transferir todos los archivos, directorios y subdirectorios de / home / a in / home / b con sftp En la máquina AI probé los comandos:

sftp [email protected]
put /home/a/* /home/b/

pero no funciona, recibo el mensaje de error: "omitiendo el archivo no regular / home / a / a1" ... [a1 es un subdirectorio de a]
¿Cómo podría modificar la instrucción put?

¡Gracias! :)

EDITAR:

Resolví usando scp:

scp -r /home/a/ [email protected]:/home/b/
fibon82
fuente
2
put -rHabría funcionado también.
WakiMiko
1
Ok, pero ¿cómo podría saber que para "poner comando" la opción -r está disponible? Si miro aquí solo se describe la bandera -P ... Lo mismo en el manual ¡Gracias! :)
fibon82
En su lugar, debe publicar eso como respuesta.
NN
Sí. En lugar de EDITAR su pregunta con la respuesta, debe responder su propia pregunta y aceptarla.
@ fibon82 Para obtener un manual actualizado de OpenSSH sftp, consulte el proyecto OpenSSH .
Martin Prikryl

Respuestas:

21

Aunque no es estrictamente equivalente a sftp, rsync es una alternativa muy poderosa para scp y sftp, especialmente al actualizar las copias de la máquina A a la máquina B, ya que no copia los archivos que no han sido alterados; también es capaz de eliminar archivos de la máquina B que se han eliminado de la máquina A (solo cuando, por supuesto, se lo indica).

En su caso, la sintaxis sería

rsync -zrp /home/a/ [email protected]:/home/b/

La -ropción es para copiar archivos de forma recursiva, -zpermite la compresión durante la transferencia y -ppreserva los permisos del archivo (creación, edición, etc.) al copiar, que es algo que scp no hace AFAIK. Son posibles muchas más opciones; como de costumbre, lee las manpáginas.

Karolos
fuente
¡Ah gracias! :) ¡Una cosa nueva que aprendí!
fibon82
@ fibon82: De nada :)
Karolos
1
Te amo, sincronicé 400 MB de datos en 1 minuto con solo usar tu código. Agregaría que también debe usar --progress, de lo contrario no mirará nada sin saber lo que está sucediendo (y a qué velocidad :))
Sandro Antonucci
1
Lamentablemente rsyncno habla sftp-Protocolo. Por lo tanto, si configura un sftp-chroot utilizando sshla compilación de,internal-sftp entonces rsyncfalla.
Tino
17

En sftpeste comando carga recursivamente el contenido del directorio actual al directorio actual remoto:

 put -r .

Ver man sftp.

Carlos Da Costa
fuente
El -rconmutador solo es compatible desde OpenSSH 5.4 .
Martin Prikryl
1
Tenga en cuenta que el -rconmutador es solo del lado del cliente (parte del sftpcomando). Por lo tanto, el lado del servidor (aquí: recepción) no necesita OpenSSH 5.4, solo el cliente debe admitirlo.
Tino
9

scp(copia segura) es el Linux de facto para transferir archivos a través de un túnel seguro. En su caso, desearía utilizar el interruptor recursivo, por ejemplo:

scp -r /home/a/ [email protected]:/home/b/
escritura02392
fuente
55
sftp y scp son en realidad protocolos diferentes, ambos basados ​​en ssh.
paradroid
1
Sí, si el servidor solo permite el protocolo sftp, esta respuesta no funciona.
рüффп
4

Intenta usar

put -r /home/a/ /home/b/

para obtener más información, echa un vistazo: esto

guest_who
fuente
1
El -rconmutador solo es compatible desde OpenSSH 5.4 .
Martin Prikryl
Tenga en cuenta que el -rconmutador es solo del lado del cliente (parte del sftpcomando). Por lo tanto, el lado del servidor (aquí: recepción) no necesita OpenSSH 5.4, solo el cliente debe admitirlo. Y: Esta debería ser la respuesta aceptada , ya que obtener (la posiblemente no admitida ) rsynccomo respuesta a una pregunta etiquetada sftpes un poco confuso.
Tino
0

En realidad, put -r debería funcionar. Pero la carpeta de destino debe estar presente en su host remoto:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2
Dieter
fuente
¿Ha agregado referencias y pruebas que respaldan lo que dice y ha confirmado que esta respuesta aún no está respondida en una de las respuestas existentes en la publicación? Lea "Por qué necesito 50 reputación para comentar" para asegurarse de que comprende cómo puede comenzar a comentar.
Pimp Juice IT
-1

En mi caso rsyncno era posible, así que usé:

mput -rp /home/a/ /home/b/
jayarjo
fuente
No hay mputcomando en OpenSSH sftp. Tal vez te refieres psftp?
Martin Prikryl