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 fibon82@machineB.com
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/ fibon82@machineB.com:/home/b/

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/ user@remote.host.com:/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.


¡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.


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/ user@remote.host.com:/home/b/

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


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

¿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/

No hay mputcomando en OpenSSH sftp. Tal vez te refieres psftp?
Martin Prikryl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.