Tramp / Dired transfère les fichiers en ligne sur ssh au lieu d'utiliser scp en externe

12

J'utilise tramp via ssh pour accéder aux fichiers distants. Pour les fichiers texte, cela fonctionne très bien, mais chaque fois que je veux copier des fichiers distants plus gros sur ma machine locale, tramp utilise sa méthode lente en ligne (encodage du fichier avec gzip). C'est beaucoup plus lent que d'utiliser une méthode externe comme par exemple scp. Comment puis-je faire en sorte qu'emacs utilise scp lors du transfert de gros fichiers?

Les informations pertinentes:

  • J'utilise un fichier ~ / .ssh / config pour accéder à la machine distante. L'alias de cette machine est hehi09 ci-dessous. L'accès est sans mot de passe

  • Messages dans le tampon de messages lors du transfert:

    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)'...
    
  • Valeurs de:

    • la valeur de tramp-copy-size-limit est 10240 (beaucoup plus petite que la taille de fichier testée)

    • la valeur de la méthode tramp-default-method est "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ fonctionne comme prévu à partir de la ligne de commande et est beaucoup plus rapide que le transfert dans emacs

Des idées pourquoi emacs n'utilise pas scp pour copier de gros fichiers? Toute aide est grandement appréciée!

Chris
la source

Réponses:

17

Lorsque vous dites "j'utilise tramp via ssh", je suppose que vous ouvrez un fichier comme /ssh:host:/path/to/file. Ceci est censé utiliser toujours la méthode ssh. Si vous souhaitez utiliser la méthode scp, vous devez utiliser /scp:host:/path/to/file. Cela utilise automatiquement ssh pour les fichiers courts et scp pour les fichiers volumineux. Si vous faites confiance à la méthode par défaut définie tramp-default-method, vous pouvez utiliser la méthode la plus courte /host:/path/to/file.

Michael Albinus
la source
Ce serait bien qu'il utilise toujours à la fois ssh et scp lors de la copie de fichiers, que ce soit / ssh ou / scp .. Ou au moins donne un message d'avertissement lors de la copie de gros binaires avec / ssh. Avant de voir votre réponse, je pensais qu'emacs n'était pas prêt à copier de gros fichiers via tramp. (puisque je n'utilisais que / ssh)
xwl
2
Dans ce cas, définissez scpvotre méthode par défaut. Même dans ce cas, Tramp copie de petits fichiers via sshet de gros fichiers via scp. Vous pouvez personnaliser la limite via tramp-copy-size-limit.
Michael Albinus
5
Depuis Emacs 26, une méthode est désormais obligatoire dans les noms de fichiers distants. Vous devez toujours dire /scp:host:/path/to/fileou /ssh:host:/path/to/file.
Michael Albinus
0

Parce que vous devez le mettre dans un ~/.emacsfichier. Malgré cela, Emacs est un éditeur de texte, pas un client SFTP ou FTP, il utilise cet base64encodage dans une sshméthode qui le ralentit trop pour le transfert de fichiers.

Ronald71
la source
Désolé, mais c'est incorrect. Comme l'indique la réponse acceptée, vous pouvez soit faire confiance à une sélection par défaut, soit prendre une décision explicite pour chaque connexion. Si vous utilisez, sshvous avez raison qu'une base64conversion est en cours, ce qui est lent pour les fichiers volumineux. Cependant, si vous utilisez scpce n'est pas le cas. Emacs est bien capable d'exécuter des commandes qui ne traitent pas du "texte". Enfin, ne dites pas aux utilisateurs d'Emacs que leur système d'exploitation préféré est un éditeur de texte;)
Chris
Vous l' avez déjà configuré avec scpet la base64conversion s'est poursuivie. Serait appréciable si cela ne se produit pas, une fois que ce sera probablement l'application principale pour les connexions SFTP. Bien qu'il soit utilisé comme éditeur de texte principal et gestionnaire de fichiers.
Ronald71
Vous avez raison, en quelque sorte réussi ici à le faire via la scpméthode, sans base64conversion, en le tournant plus rapidement.
Ronald71
C'est étrange. Je n'avais pas besoin de paramètres spéciaux pour scpne pas utiliser l' base64encodage. Pourriez-vous rapidement expliquer quel était le problème dans votre cas pour quiconque passerait par ici à l'avenir?
Chris
Déjà réussi à le faire, @Chris. Le problème principal était que la TRAMP diredconnexion était ouverte via ssh, puis exécutait la scpcommande, ce qui a effacé la base64conversion. Lorsque vous exécutez la TRAMP diredconnexion et la copie de la commande elle-même avec la scpméthode, elle ignore la base64conversion et accélère.
Ronald71