Tramp / Dired dosyaları scp externaly yerine ssh üzerinden satıriçi aktarır


12

Uzak dosyalara erişmek için ssh ile tramp kullanıyorum. Metin dosyaları için bu gerçekten iyi çalışıyor, ancak daha büyük uzak dosyaları yerel makineme kopyalamak istediğimde, tramp yavaş satır içi yöntemini kullanır (dosyayı gzip ile kodlar). Bu, örneğin scp gibi harici bir yöntem kullanmaktan çok daha yavaştır. Büyük dosyaları aktarırken emacs'ın scp kullanmasını nasıl sağlayabilirim?

İlgili bilgiler:

  • Uzak makineye erişmek için bir ~ / .ssh / config dosyası kullanıyorum. Bu makinenin diğer adı hehi09'dur. Erişim şifresiz

  • Aktarım sırasında mesaj arabelleğindeki mesajlar :

    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)'...
    
  • Değerleri:

    • tramp-copy-size-limit'in değeri 10240 (test edilen dosya boyutundan çok daha küçük)

    • tramp-default-method'un değeri "scp" dir

  • $ scp hehi09:/home/christian/big_file.dat ~/ komut satırından beklendiği gibi çalışır ve emacs aktarımından çok daha hızlıdır

Emacs neden büyük dosyaları kopyalamak için scp kullanmadığına dair herhangi bir fikir? Herhangi bir yardım büyük beğeni topluyor!

Yanıtlar:


17

"Ben ssh ile tramp kullanıyorum" derken, sanırım bir dosya açıyorsunuz /ssh:host:/path/to/file. Bunun her zaman ssh yöntemini kullanması gerekir. Scp yöntemini kullanmak istiyorsanız, kullanmalısınız /scp:host:/path/to/file. Bu, kısa dosyalar için otomatik olarak ssh ve büyük dosyalar için scp kullanır. Ayarlanan varsayılan yönteme güveniyorsanız tramp-default-method, daha kısa olanı kullanabilirsiniz /host:/path/to/file.


/ Ssh veya / scp olsun, dosyaları kopyalarken her zaman hem ssh hem de scp kullanması iyi olur. Ya da en azından / ssh ile büyük ikili dosyaları kopyalarken bazı uyarı mesajları verir. Cevabınızı görmeden önce, emacs'ın büyük dosyaları trampetle kopyalamaya hazır olmadığını düşündüm. (sadece / ssh kullandığımdan beri)
xwl 5:16

2
Bu durumda, scpvarsayılan yönteminizi yapın. O zaman bile, Tramp küçük dosyaları sshve büyük dosyaları kopyalar scp. İle sınırı özelleştirebilirsiniz tramp-copy-size-limit.
Michael Albinus

5
Emacs 26'dan itibaren uzak dosya adlarında bir yöntem zorunludur. Her zaman /scp:host:/path/to/fileya da söylemelisin /ssh:host:/path/to/file.
Michael Albinus

0

Çünkü ~/.emacsdosyada ayarlamalısınız . Buna rağmen, Emacs bir SFTP veya FTP istemcisi değil, bir metin düzenleyicisidir, bu base64kodlamayı sshdosya aktarımı için çok yavaş hale getiren bir yöntemdeyken kullanır .


Üzgünüm, ama bu yanlış. Kabul edilen cevabın dediği gibi, varsayılan bir seçime güvenebilir veya her bağlantı için açık bir karar verebilirsiniz. Kullanmak yoksa sshbir o doğru olan base64dönüşüm o büyücek dosyaları için yavaş gerçekleşiyor. Ancak, eğer bunu kullanırsanız scpdurum böyle değil. Emacs, "metin" ile ilgilenmeyen komutları yürütebilir. Son olarak, Emacs kullanıcılarına en sevdikleri işletim sisteminin bir metin editörü olduğunu kırmayın;)
Chris

Zaten kurdu scpve base64dönüşüm gerçekleşmeye devam etti. SFTP bağlantıları için ana uygulama olacaksa, olmazsa takdir edilecektir. Ana metin editörü ve dosya yöneticisi olarak kullanılmasına rağmen.
Ronald71

Haklısın, bir şekilde burada dönüştürme yoluyla scp, base64daha hızlı çevirerek yöntemle yapmayı başardın .
Ronald71

Bu garip. Kodlamayı scpkullanmamak için özel ayarlara ihtiyacım yoktu base64. Gelecekte buraya uğrayacak biri için sizin durumunuzdaki sorunun ne olduğunu hızlıca paylaşabilir misiniz?
Chris

Bunu zaten yapmayı başardım, @Chris. Asıl sorun, TRAMP diredbağlantının açık olması ve sshardından dönüşümü scpgerektiren komutun çalıştırılmasıydı base64. Hem TRAMP diredbağlantı hem de kopya komutunun her ikisini de scpyöntemle çalıştırdığınızda, base64dönüştürme dikkate alınmadı ve daha hızlı yaptı.
Ronald71
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.