Tramp / Dired transfiere archivos en línea sobre ssh en lugar de usar scp externamente

12

Estoy usando vagabundo a través de ssh para acceder a archivos remotos. Para los archivos de texto, esto funciona muy bien, pero cada vez que quiero copiar archivos remotos más grandes en mi máquina local, vagabundo usa su método lento en línea (codificando el archivo con gzip). Esto es mucho más lento que usar un método externo como, por ejemplo, scp. ¿Cómo hago que emacs use scp cuando transfiero archivos grandes?

Información relevante:

  • Utilizo un archivo ~ / .ssh / config para acceder a la máquina remota. El alias de esa máquina es hehi09 a continuación. El acceso es sin contraseña

  • Mensajes en el búfer de mensajes al transferir:

    Copying /ssh:hehi09:/home/christian/big_file.dat to /home/christian/big_file.dat'...
    Tramp: Inserting `/ssh:hehi09:/home/christian/big_file.dat'...
    Tramp: Encoding remote file `/ssh:hehi09:/home/christian/big_file.dat' with `(gzip <%s | base64)'...
    
  • Valores de:

    • el valor del límite de tamaño de la copia de vagabundo es 10240 (mucho más pequeño que el tamaño de archivo probado)

    • el valor del método de vagabundo predeterminado es "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ funciona como se esperaba desde la línea de comando y es mucho más rápido que la transferencia en emacs

¿Alguna idea de por qué emacs no está usando scp para copiar archivos grandes? ¡Cualquier ayuda es muy apreciada!

Chris
fuente

Respuestas:

17

Cuando dice "Estoy usando vagabundo a través de ssh", supongo que abre un archivo como /ssh:host:/path/to/file. Se supone que esto usa siempre el método ssh. Si desea utilizar el método scp, deberá utilizarlo /scp:host:/path/to/file. Esto utiliza automáticamente ssh para archivos cortos y scp para archivos grandes. Si confía en el método predeterminado establecido tramp-default-method, puede usar el más corto /host:/path/to/file.

Michael Albinus
fuente
Sería bueno que siempre use ssh y scp al copiar archivos, independientemente de si / ssh o / scp .. O al menos da algún mensaje de advertencia al copiar binarios grandes con / ssh. Antes de ver su respuesta, pensé que emacs no está listo para copiar archivos grandes a través de vagabundo. (ya que solo usé / ssh)
xwl
2
En ese caso, haga scpsu método predeterminado. Incluso entonces, Tramp copia archivos pequeños vía sshy archivos grandes vía scp. Puede personalizar el límite a través de tramp-copy-size-limit.
Michael Albinus
44
A partir de Emacs 26, un método es obligatorio ahora en los nombres de archivos remotos. Siempre debes decir /scp:host:/path/to/fileo /ssh:host:/path/to/file.
Michael Albinus
0

Porque tienes que configurarlo en el ~/.emacsarchivo. A pesar de eso, Emacs es un editor de texto, no un cliente SFTP o FTP, utiliza esta base64codificación mientras que en un sshmétodo que lo hace demasiado lento para la transferencia de archivos.

Ronald71
fuente
Lo siento, pero eso es incorrecto. Como dice la respuesta aceptada, puede confiar en una selección predeterminada o tomar una decisión explícita para cada conexión. Si lo usa ssh, tiene razón en que se base64está llevando a cabo una conversión que es lenta para archivos grandes. Sin embargo, si usa scpese no es el caso. Emacs es muy capaz de ejecutar comandos que no tratan con "texto". Por último, no les digas a los usuarios de Emacs que su sistema operativo favorito es un editor de texto;)
Chris
Ya lo configuró scpy la base64conversión siguió ocurriendo. Sería apreciable si no sucede, una vez que probablemente sea la aplicación principal para las conexiones SFTP. Aunque se utiliza como editor de texto principal y administrador de archivos.
Ronald71
Tienes razón, de alguna manera se las arregló para hacerlo a través del scpmétodo, sin base64conversión, volviéndolo más rápido.
Ronald71
Eso es extraño. No necesitaba ninguna configuración especial para scpno usar base64codificación. ¿Podrías compartir rápidamente cuál fue el problema en tu caso para que alguien viniera por aquí en el futuro?
Chris
Ya lo logré, @Chris. El problema principal era que la TRAMP diredconexión estaba abierta a través de ssh, luego estaba ejecutando el scpcomando, lo que impedía la base64conversión. Cuando ejecuta tanto el TRAMP diredcomando de conexión como el de copia con el scpmétodo, no tuvo en cuenta la base64conversión y fue más rápido.
Ronald71