Tramp / Dired通过ssh内联传输文件,而不是使用外部scp


12

我正在通过ssh使用流浪汉访问远程文件。对于文本文件,这确实工作得很好,但是每当我想将较大的远程文件复制到本地计算机时,tramp都会使用其缓慢的内联方法(使用gzip编码文件)。这比使用外部方法(例如scp)要慢得多。传输大文件时,如何使emacs使用scp?

相关信息:

  • 我使用〜/ .ssh / config文件访问远程计算机。该计算机的别名在下面是hehi09。访问无密码

  • 传输时消息缓冲区中的消息

    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)'...
    
  • 值:

    • tramp-copy-size-limit的值为10240(比测试文件的大小小得多)

    • tramp-default-method的值为“ scp”

  • $ scp hehi09:/home/christian/big_file.dat ~/ 可以在命令行中按预期工作,并且比emacs中的传输速度快得多

有什么想法为什么emacs不使用scp复制大文件吗?任何帮助是极大的赞赏!

Answers:


17

当您说“我正在通过ssh使用流浪汉”时,我想您打开的文件是/ssh:host:/path/to/file。应该总是使用ssh方法。如果要使用scp方法,则应使用/scp:host:/path/to/file。对于短文件,这将自动使用ssh;对于大文件,这将自动使用scp。如果您信任其中设置的默认方法tramp-default-method,则可以使用较短的方法/host:/path/to/file


最好是在复制文件时始终同时使用ssh和scp,而不管是/ ssh还是/ scp。或者至少在使用/ ssh复制大型二进制文件时给出一些警告消息。在看到您的答案之前,我认为emacs还没有准备好通过流氓复制大文件。(因为我只使用了/ ssh)
xwl

2
在这种情况下,scp请使用默认方法。即使如此,Tramp仍通过复制小型文件ssh,并通过复制大型文件scp。您可以通过来自定义限制tramp-copy-size-limit
迈克尔·阿尔比努斯

5
从Emacs 26开始,现在在远程文件名中必须使用一种方法。您必须总是说/scp:host:/path/to/file/ssh:host:/path/to/file
迈克尔·阿尔比努斯

0

因为您必须在~/.emacs文件中进行设置。尽管如此,Emacs还是文本编辑器,而不是SFTP或FTP客户端,它在使用此base64编码的同时ssh会使文件传输太慢。


对不起,但这是不正确的。正如接受的答案所说,您可以信任默认选择,也可以为每个连接做出明确的决定。如果您确实使用过ssh,那将是正确的base64转换,这对于大型文件来说很慢。但是,如果scp不是这样的话。Emacs能够执行不处理“文本”的命令。最后,不要让Emacs用户知道他们最喜欢的操作系统是文本编辑器;)
克里斯

已经设置好了,scp并且base64转换不断发生。如果没有发生,它将是可观的,一旦它有可能成为SFTP连接的主要应用程序。尽管它用作主要的文本编辑器和文件管理器。
罗纳德71

没错,这里可以通过某种方式设法通过scp方法进行操作,而无需进行base64转换,从而可以更快地将其打开。
Ronald71

真奇怪 我不需要任何特殊设置scp即可不使用base64编码。您能否迅速分享一下您将来遇到的任何人的问题所在?
克里斯

@Chris已经设法做到了。主要问题是该TRAMP dired连接是通过打开的ssh,然后正在运行scp命令,这使base64转换无效。当TRAMP dired同时使用scp方法运行connection和copy命令本身时,它忽略了base64转换并且执行得更快。
罗纳德71
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.