Tramp / Dired überträgt Dateien inline über ssh, anstatt scp extern zu verwenden

12

Ich benutze tramp via ssh, um auf entfernte Dateien zuzugreifen. Bei Textdateien funktioniert dies sehr gut, aber wenn ich größere Remote-Dateien auf meinen lokalen Computer kopieren möchte, verwendet tramp die langsame Inline-Methode (Codierung der Datei mit gzip). Dies ist viel langsamer als die Verwendung einer externen Methode wie beispielsweise scp. Wie kann ich Emacs dazu bringen, scp beim Übertragen großer Dateien zu verwenden?

Relevante Information:

  • Ich verwende eine ~ / .ssh / config-Datei, um auf den Remote-Computer zuzugreifen. Der Alias ​​für diese Maschine lautet im Folgenden hehi09. Der Zugriff erfolgt ohne Passwort

  • Nachrichten im Nachrichtenpuffer beim Übertragen:

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

    • Der Wert für tramp-copy-size-limit ist 10240 (viel kleiner als die getestete Dateigröße).

    • Der Wert der tramp-default-Methode ist "scp".

  • $ scp hehi09:/home/christian/big_file.dat ~/ Funktioniert wie erwartet über die Befehlszeile und ist viel schneller als die Übertragung in Emacs

Irgendwelche Ideen, warum emacs scp nicht zum Kopieren großer Dateien verwendet? Jede Hilfe wird sehr geschätzt!

Chris
quelle

Antworten:

17

Wenn Sie sagen "Ich benutze Tramp über SSH", öffnen Sie vermutlich eine Datei wie /ssh:host:/path/to/file. Dies soll immer die ssh-Methode verwenden. Wenn Sie die scp-Methode verwenden möchten, müssen Sie verwenden /scp:host:/path/to/file. Dies verwendet automatisch ssh für kurze Dateien und scp für große Dateien. Wenn Sie der eingestellten Standardmethode vertrauen tramp-default-method, können Sie die kürzere verwenden /host:/path/to/file.

Michael Albinus
quelle
Es wäre schön, wenn beim Kopieren von Dateien immer sowohl ssh als auch scp verwendet würden, unabhängig davon, ob / ssh oder / scp. Oder zumindest eine Warnmeldung beim Kopieren großer Binärdateien mit / ssh. Bevor ich Ihre Antwort sah, dachte ich, dass emacs nicht bereit ist, große Dateien über tramp zu kopieren. (da ich nur / ssh verwendet habe)
xwl
2
In diesem Fall legen Sie scpIhre Standardmethode fest. Selbst dann kopiert Tramp kleine Dateien über sshund große Dateien über scp. Sie können das Limit über anpassen tramp-copy-size-limit.
Michael Albinus
4
Ab Emacs 26 ist eine Methode in Remote-Dateinamen jetzt obligatorisch. Sie müssen immer sagen /scp:host:/path/to/fileoder /ssh:host:/path/to/file.
Michael Albinus
0

Weil du es in eine ~/.emacsDatei setzen musst . Trotzdem ist Emacs ein Texteditor, kein SFTP- oder FTP-Client. Es verwendet diese base64Codierung, während es sich um eine sshMethode handelt, die für die Dateiübertragung zu langsam wird.

Ronald71
quelle
Entschuldigung, aber das ist falsch. Wie in der akzeptierten Antwort angegeben, können Sie entweder einer Standardauswahl vertrauen oder für jede Verbindung eine explizite Entscheidung treffen. Wenn Sie verwenden, haben sshSie base64Recht, dass eine Konvertierung stattfindet, die für größere Dateien langsam ist. Wenn Sie dies verwenden scp, ist dies jedoch nicht der Fall. Emacs ist gut in der Lage, Befehle auszuführen, die sich nicht mit "Text" befassen. Zum Schluss sollten Sie Emacs-Benutzern nicht mitteilen, dass ihr Lieblingsbetriebssystem ein Texteditor ist;)
Chris
Bereits eingerichtet mit scpund base64Konvertierung immer wieder. Wäre bemerkenswert, wenn es nicht passiert, sobald es wahrscheinlich die Hauptanwendung für SFTP-Verbindungen wäre. Obwohl es als Haupttexteditor und Dateimanager verwendet wird.
Ronald71
Sie haben Recht, irgendwie ist es hier gelungen, dies über eine scpMethode ohne base64Konvertierung zu tun und es schneller zu drehen.
Ronald71
Das ist komisch. Ich brauchte keine speziellen Einstellungen, um scpkeine base64Codierung zu verwenden. Können Sie schnell mitteilen, was das Problem in Ihrem Fall für jemanden war, der in Zukunft hier vorbeikommt?
Chris
Schon geschafft, @Chris. Hauptproblem war, dass die TRAMP diredVerbindung über geöffnet war sshund dann ein scpBefehl ausgeführt wurde, der die base64Konvertierung verpflichtete. Wenn sowohl der TRAMP diredVerbindungs- als auch der Kopierbefehl selbst mit der scpMethode ausgeführt wurden, wurde die base64Konvertierung ignoriert und schneller ausgeführt.
Ronald71