Tramp / Dired передає файли, вбудовані через ssh, замість того, щоб використовувати scp зовнішньо


12

Я використовую Tramp через ssh для доступу до віддалених файлів. Для текстових файлів це працює дуже добре, але всякий раз, коли мені хочеться скопіювати більші віддалені файли на свою локальну машину, Бродяга використовує метод повільного вбудовування (кодування файлу 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 не готовий до копіювання великих файлів через бродягу. (оскільки я використовував тільки / ssh)
xwl

2
У цьому випадку зробіть scpметод за замовчуванням. Вже тоді Трамп копіює невеликі файли через 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перетворення, швидше перетворюючи його.
Рональд71

Це дивно. Мені не потрібні спеціальні налаштування, scpщоб не використовувати base64кодування. Чи можете ви швидко поділитися з тим, яка проблема була у вашому випадку, щоб хтось сюди зайшов сюди?
Кріс

Вже вдалося це зробити, @Chris. Основна проблема полягала в тому, що TRAMP diredз'єднання було відкрито через ssh, тоді була запущена scpкоманда, яка зобов'язувала base64перетворення. Запустивши як TRAMP diredкоманду з'єднання, так і копіюючи обидва scpспособи, це знехтувало base64перетворення та зробило швидше.
Рональд71
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.