Tramp / Dired transfere arquivos em linha sobre ssh em vez de usar scp externamente

12

Estou usando o tramp via ssh para acessar arquivos remotos. Para arquivos de texto, isso está funcionando muito bem, mas sempre que eu quero copiar arquivos remotos maiores para minha máquina local, o tramp usa seu método embutido lento (codificando o arquivo com gzip). Isso é muito mais lento do que usar um método externo, como por exemplo, scp. Como faço para o emacs usar o scp ao transferir arquivos grandes?

Informação relevante:

  • Eu uso um arquivo ~ / .ssh / config para acessar a máquina remota. O alias para essa máquina é hehi09 a seguir. O acesso é sem senha

  • Mensagens no buffer de mensagens ao 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:

    • o valor do tramp-copy-size-limit é 10240 (muito menor que o tamanho do arquivo testado)

    • O valor do método tramp-default-method é "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ funciona como esperado na linha de comando e é muito mais rápido que a transferência no emacs

Alguma idéia de por que o emacs não está usando o scp para copiar arquivos grandes? Qualquer ajuda é muito apreciada!

Chris
fonte

Respostas:

17

Quando você está dizendo "Estou usando o tramp via ssh", suponho que você abra um arquivo como /ssh:host:/path/to/file. É suposto usar sempre o método ssh. Se você quiser usar o método scp, deverá usar /scp:host:/path/to/file. Isso usa automaticamente ssh para arquivos curtos e scp para arquivos grandes. Se você confiar no método padrão definido tramp-default-method, poderá usar o menor /host:/path/to/file.

Michael Albinus
fonte
Seria bom que ele sempre use ssh e scp ao copiar arquivos, independentemente de / ssh ou / scp .. Ou, pelo menos, dê alguma mensagem de aviso ao copiar binários grandes com / ssh. Antes de ver sua resposta, eu pensei que o emacs não está pronto para copiar arquivos grandes via tramp. (desde i apenas utilizado / ssh)
xwl
2
Nesse caso, faça o scpseu método padrão. Mesmo assim, o Tramp copia arquivos pequenos via sshe arquivos grandes via scp. Você pode personalizar o limite via tramp-copy-size-limit.
Michael Albinus
4
A partir do Emacs 26, um método é obrigatório agora em nomes de arquivos remotos. Você deve sempre dizer /scp:host:/path/to/fileou /ssh:host:/path/to/file.
Michael Albinus
0

Porque você precisa configurá-lo no ~/.emacsarquivo. Apesar disso, o Emacs é um editor de texto, não um cliente SFTP ou FTP, mas usa essa base64codificação no sshmétodo que o torna muito lento para a transferência de arquivos.

Ronald71
fonte
Desculpe, mas isso está incorreto. Como a resposta aceita diz, você pode confiar em uma seleção padrão ou tomar uma decisão explícita para cada conexão. Se você usar, sshestá certo de que uma base64conversão está ocorrendo, o que é lento para arquivos grandes. No entanto, se você usar scpesse não é o caso. O Emacs é capaz de executar comandos que não lidam com "texto". Por fim, não diga aos usuários do Emacs que seu sistema operacional favorito é um editor de texto;)
Chris
Já o configurei scpe a base64conversão continuou ocorrendo. Seria apreciável se isso não acontecer, uma vez que provavelmente seria o principal aplicativo para conexões SFTP. Embora seja usado como editor de texto principal e gerenciador de arquivos.
Ronald71 20/03
Você está certo, de alguma forma conseguiu aqui fazê-lo através do scpmétodo, sem base64conversão, tornando-o mais rápido.
Ronald71 21/03
Isso é estranho. Eu não precisava de configurações especiais para scpnão usar base64codificação. Você poderia compartilhar rapidamente qual era o problema em seu caso de alguém aparecer aqui no futuro?
Chris
Já conseguiu, @Chris. O principal problema era que a TRAMP diredconexão estava aberta via e ssh, em seguida, estava executando o scpcomando, o que impedia a base64conversão. Ao executar o TRAMP diredcomando connection and copy scp, ele próprio, com o método, desconsiderou a base64conversão e foi mais rápido.
Ronald71 27/03