Tengo algunos problemas para cargar directorios (que contienen otros directorios de algunos niveles de profundidad) por sftp. Me doy cuenta de que podría solucionar esto al comprimir, pero no veo por qué es necesario.
De todos modos, lo intento
sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"
Creo que el último mensaje de error es completamente estúpido. ¿Entonces el directorio no existe? ¿Por qué no crear el directorio?
¿Hay alguna forma de solucionar este problema con sftp, o debería usar scp?
sftp
permiteput -r
desde OpenSSH 5.4No sé por qué sftp hace esto, pero solo puede realizar una copia recursiva si el directorio de destino ya existe. Entonces haz esto ...
fuente
-r
necesita OpenSSH 5.4 o superiorQuizás te interese usar en su
rsync
lugar. El comando para eso seríaEsto copiará todo
bin/
y lo colocará en el servidor remoto/home/earlz/blah/bin/
. Como beneficio adicional, primero verificará si el archivo en el lado remoto no ha cambiado, y si no lo ha hecho, no lo reenviará. Además, puede agregar una opción -z y la comprimirá por usted.fuente
sftp
es un comando y un protocolo .rsync
no es compatible con elsftp
protocolo.lcd
: su carpeta local (con subcarpetas)cd
: su carpeta remotaput -r .
fuente
cd
entrar en el directorio que quería subir lo hizo. ¡Gracias!¿Puedo sugerir una respuesta algo complicada, sin comprimir, pero que incluya alquitrán?
Aquí vamos:
Esto empacará el directorio ./bin con tar (-cf: = crear archivo), nombre de archivo - (ninguno, stdout) y lo canalizará a través del comando ssh a target.org (que también podría ser una IP) donde el comando entre comillas se realiza, que es: cd a bla, y tar -xf (archivo de extracción) - ninguno, sin nombre, solo stdin.
Es como empacar un paquete en casa, llevarlo a la publicación, luego conducir al trabajo, donde espera el paquete y abrirlo.
Tal vez hay una solución mucho más elegante que solo usa sftp.
fuente
tar
es una muy buena solución, sin embargo, esto necesitassh
soporte de inicio de sesión (además desftp
un protocolo diferentessh
).tar
, a diferencia de otros, de forma predeterminada , se ejecuta de forma recursiva, transfiere todos los archivos especiales (FIFO, dispositivos de bloque / caracteres, etc.), intenta traducir el mapeo UID / GID desde el sistema de origen al sistema de destino y tiene una línea de comando corta tradicional. (Sin embargo, una excepción: "los sockets de dominio Unix" no se transfieren. ¿Pero quién los necesita?)pv
herramienta para ver la velocidad en transferencias largasPuede usar yafc (aún otro cliente FTP / SFTP). La
-r
opción funciona muy bien allí.fuente
Puede usar rsync , que 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).
por ejemplo :
La opción -r es para copiar archivos de forma recursiva, -z habilita la compresión durante la transferencia y -p conserva 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, lea las páginas del manual.
Respuesta original de Karolos
fuente
Inicie sesión en el servidor remoto con ssh, use sftp para conectarse nuevamente a su caja, luego use el
get -r
comando para transferir directorios al servidor remoto. El comando get le permite transferir directorios de forma recursiva sin tener el directorio ya creado.fuente
Caso SFTP:
Necesitaba copiar esa estructura en mi ftp:
Eso resolvió mi problema:
fuente
Acabo de enterarme de Arch Linux Wiki que es posible montar sftp-share usando sshfs. Estoy ejecutando un servidor sftp con chroot y jail y sshfs funciona muy bien.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
fuente