Tramp / Dired mentransfer file inline over ssh daripada menggunakan scp externaly

12

Saya menggunakan gelandangan melalui ssh untuk mengakses file jarak jauh. Untuk file teks, ini berfungsi dengan sangat baik, tetapi setiap kali saya ingin menyalin file jarak jauh yang lebih besar ke mesin lokal saya, tramp menggunakan metode inline lambat (penyandian file dengan gzip). Ini jauh lebih lambat daripada menggunakan metode eksternal seperti misalnya scp. Bagaimana cara membuat emacs menggunakan scp saat mentransfer file besar?

Informasi yang relevan:

  • Saya menggunakan file ~ / .ssh / config untuk mengakses mesin remote. Alias ​​untuk mesin itu adalah hehi09 di bawah ini. Aksesnya tanpa kata sandi

  • Pesan di buffer pesan saat mentransfer:

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

    • nilai tramp-copy-size-limit adalah 10240 (jauh lebih kecil dari ukuran file yang diuji)

    • nilai tramp-default-method adalah "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ berfungsi seperti yang diharapkan dari baris perintah dan jauh lebih cepat daripada transfer di emacs

Adakah ide mengapa emacs tidak menggunakan scp untuk menyalin file besar? Setiap bantuan sangat dihargai!

Chris
sumber

Jawaban:

17

Ketika Anda mengatakan "Saya menggunakan gelandangan melalui ssh" Saya kira Anda membuka file seperti /ssh:host:/path/to/file. Ini seharusnya selalu menggunakan metode ssh. Jika Anda ingin menggunakan metode scp, Anda harus menggunakan /scp:host:/path/to/file. Ini menggunakan ssh untuk file pendek secara otomatis, dan scp untuk file besar. Jika Anda mempercayai metode default yang ditetapkan tramp-default-method, Anda bisa menggunakan yang lebih pendek /host:/path/to/file.

Michael Albinus
sumber
Alangkah baiknya jika selalu menggunakan ssh dan scp saat menyalin file, terlepas dari apakah / ssh atau / scp .. Atau setidaknya memberikan beberapa pesan peringatan saat menyalin binari besar dengan / ssh. Sebelum melihat jawaban Anda, saya pikir emacs belum siap untuk menyalin file besar melalui gelandangan. (karena saya hanya menggunakan / ssh)
xwl
2
Dalam hal ini, buat scpmetode default Anda. Bahkan kemudian, Tramp menyalin file kecil melalui ssh, dan file besar via scp. Anda dapat menyesuaikan batas melalui tramp-copy-size-limit.
Michael Albinus
5
Pada Emacs 26, metode sekarang wajib dalam nama file jarak jauh. Anda harus selalu mengatakan /scp:host:/path/to/fileatau /ssh:host:/path/to/file.
Michael Albinus
0

Karena Anda harus mengaturnya dalam ~/.emacsfile. Meskipun demikian, Emacs adalah editor teks, bukan klien SFTP atau FTP, ia menggunakan base64pengkodean ini sementara dalam sshmetode yang ternyata terlalu lambat untuk transfer file.

Ronald71
sumber
Maaf, tapi itu tidak benar. Seperti kata jawaban yang diterima Anda dapat memercayai pilihan default atau membuat keputusan eksplisit untuk setiap koneksi. Jika Anda menggunakan sshAnda benar bahwa base64konversi sedang berlangsung yang lambat untuk file besar. Namun, jika Anda menggunakannya scpbukan itu masalahnya. Emacs mampu mengeksekusi perintah yang tidak berhubungan dengan "teks". Terakhir, jangan bagi pengguna Emacs bahwa OS favorit mereka adalah editor teks;)
Chris
Sudah menyiapkannya scpdan base64konversi terus terjadi. Akan sangat dihargai jika itu tidak terjadi, setelah itu kemungkinan akan menjadi aplikasi utama untuk koneksi SFTP. Meskipun digunakan sebagai editor teks utama dan manajer file.
Ronald71
Anda benar, entah bagaimana berhasil di sini untuk melakukannya melalui scpmetode, tanpa base64konversi, mengubahnya lebih cepat.
Ronald71
Itu aneh. Saya tidak memerlukan pengaturan khusus untuk scptidak menggunakan base64pengkodean. Bisakah Anda dengan cepat berbagi masalah yang ada dalam kasus Anda untuk siapa saja yang mampir di sini di masa depan?
Chris
Sudah berhasil melakukannya, @ Chris. Masalah utama adalah bahwa TRAMP diredkoneksi terbuka melalui ssh, kemudian menjalankan scpperintah, yang mematuhi base64konversi. Ketika menjalankan kedua TRAMP diredkoneksi dan menyalin perintah itu sendiri baik dengan scpmetode, itu mengabaikan base64konversi dan melakukan lebih cepat.
Ronald71