Respuestas:
sftp
, like cp
y scp
, requiere que cuando copie una carpeta (y su contenido, obviamente), tenga que decirle explícitamente que desea transferir la carpeta de forma recursiva con la -r
opción.
Entonces, agregue -r
al comando.
-r
al sftp
comando cuando se conecte. sftp -r user@host
Couldn't canonicalise: No such file or directory
.
# sftp user@remote-host
#> get -r remote-folder
Solo puedo sugerir, lo usas rsync
. Es algo así como un estándar de la industria, cuando se mueven archivos a través de conexiones seguras.
rsync -alPvz ./source_dir server.com:destination_dir
Es lo que he estado usando durante años por ahora.
(la -a
opción se ocupa de cosas como la recursividad de directorio)
-a
= recursión + mantener enlaces simbólicos, permisos, tiempos de modificación, propietario, grupo, archivos especiales y archivos de dispositivo (este último requiere privilegios de superusuario); -l
= mantener enlaces simbólicos (ya incluidos en -a
); -P
= mostrar progreso durante la transferencia + mantener archivos parcialmente transferidos; -v
= modo detallado (sin embargo, parece obligatorio cuando se usa -P
para evitar un error extraño (¿error?) protocol version mismatch
); -z
= habilitar la compresión de los datos transferidos.
-l
interruptor debe usarse o no. Recuerdo que las versiones anteriores no se incluyeron -l
en -a
.
También puede usar el uso scp
. El formato general es
scp -rp sourceDirName username@server:destDirName
scp
significa "copia segura". Las banderas son
-r
recurrir a subdirectorios-p
preservar tiempos de modificaciónCreo que el resto de los elementos se explican por sí mismos.
Si rsync
no es una opción, luego recomendaría lftp
:
lftp sftp://user@host.com/path/path/
Luego use el mirror
comando para cargar recursivamente, así:
mirror -R
(Tenga en cuenta que la recursividad es la predeterminada. -R
Es para revertir : para que el comando espejo se cargue en lugar de descargar. Intente agregar --dry-run
una prueba para asegurarse de que está haciendo lo que espera).
O para subir sin recursividad:
mirror --no-recursion
Tienes que cd
ingresar a los directorios que deseas reflejar. ¡Funciona genial!
Si puedes, usa sshfs . Es un sistema de archivos FUSE , disponible en la mayoría de los equipos modernos, y funciona con cualquier servidor SFTP. Este es un sistema de archivos remoto: le permite manipular archivos remotos (a través del protocolo SFTP) con las utilidades habituales.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Es un poco difícil pero lo que funciona para mí es:
ssh
para iniciar sesión en la máquina remotasftp
desde la máquina remota a su máquina localget
comando con la -r
opción de mover el directorio y todos sus archivos.sftp> get -r data /opt/bin get: Invalid flag -r
Si su pregunta es en realidad '¿cómo uso sftp para transferir un directorio', entonces
sftp -r user@server
Pero si transfiere un directorio, podría sugerir dos mejores opciones, según sus necesidades. sftp
requiere iniciar sesión en el servidor remoto en un símbolo del sistema de tipo ssh, pero si todo lo que desea son los archivos, hay formas más fáciles y rápidas.
Scp
Para una transferencia única, para subir prueba:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Si planea sincronizar los directorios de manera regular, usar rsync tiene más sentido. Realiza deltas entre los dos directorios, ahorrando tiempo de transferencia y datos a través del cable.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Aquí hay una lista de algunas de las opciones rsync más comunes: ( tomado de aquí )
¡Espero que ayude!
puede llegar desde el servidor a su ruta local al
scp -rp user@server:directoryname(full path) .