Tramp / Dired передает файлы встроенными через ssh вместо использования scp externaly

12

Я использую tramp через 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 для копирования больших файлов? Любая помощь с благодарностью!

Крис
источник

Ответы:

17

Когда вы говорите "Я использую tramp через 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 не готов копировать большие файлы с помощью tramp. (так как я использовал только / 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когда он слишком медленный для передачи файлов.

Ronald71
источник
Извините, но это неверно. Как говорится в принятом ответе, вы можете либо доверять выбору по умолчанию, либо принимать четкое решение для каждого соединения. Если вы используете его, sshвы правы в том, что происходит base64конверсия, которая медленна для больших файлов. Однако, если вы используете scpэто не так. Emacs хорошо способен выполнять команды, которые не имеют отношения к «тексту». Наконец, не дайте пользователям Emacs понять, что их любимая ОС - это текстовый редактор;)
Крис
Уже настроил его, scpи base64преобразование продолжалось. Было бы замечательно, если бы это не произошло, как только это, вероятно, было бы основным приложением для соединений SFTP. Хотя он используется в качестве основного текстового редактора и файлового менеджера.
Рональд71
Вы правы, как-то здесь удалось это сделать scpметодом, без base64конвертации, повернув его быстрее.
Ronald71
Это странно. Мне не нужно было никаких специальных настроек, scpчтобы не использовать base64кодировку. Не могли бы вы быстро рассказать, в чем проблема в вашем случае, если кто-нибудь заглянет сюда в будущем?
Крис
Уже удалось это сделать, @Chris. Основная проблема заключалась в том, что TRAMP diredсоединение было открыто через ssh, затем выполнялась scpкоманда, которая выполняла base64преобразование. При запуске и TRAMP diredсоединения, и самой команды копирования как с scpметодом, он игнорировал base64преобразование и делал быстрее.
Ronald71