Tramp / Dired trasferisce i file in linea su ssh invece di usare scp externaly


12

Sto usando vagabondo via ssh per accedere ai file remoti. Per i file di testo, funziona davvero bene, ma ogni volta che voglio copiare file remoti più grandi sul mio computer locale, il vagabondo usa il suo metodo lento in linea (codifica del file con gzip). Questo è molto più lento rispetto all'utilizzo di un metodo esterno come ad esempio scp. Come posso fare in modo che emacs usi scp quando trasferisco file di grandi dimensioni?

Informazioni rilevanti:

  • Uso un file ~ / .ssh / config per accedere al computer remoto. L'alias per quella macchina è hehi09 nel seguito. L'accesso è senza password

  • Messaggi nel buffer dei messaggi durante il trasferimento:

    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)'...
    
  • Valori di:

    • il valore di tramp-copy-size-limit è 10240 (molto più piccolo della dimensione del file testato)

    • Il valore di tramp-default-method è "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ funziona come previsto dalla riga di comando ed è molto più veloce del trasferimento in emacs

Qualche idea sul perché emacs non stia usando scp per copiare file di grandi dimensioni? Qualsiasi aiuto è molto apprezzato!

Risposte:


17

Quando dici "Sto usando il vagabondo tramite ssh" suppongo che tu apra un file come /ssh:host:/path/to/file. Questo dovrebbe usare sempre il metodo ssh. Se si desidera utilizzare il metodo scp, è necessario utilizzare /scp:host:/path/to/file. Questo utilizza automaticamente ssh per file brevi e scp per file di grandi dimensioni. Se ritieni affidabile il metodo predefinito impostato tramp-default-method, puoi utilizzare il più breve /host:/path/to/file.


Sarebbe bello usare sempre sia ssh che scp quando si copiano i file, indipendentemente dal fatto che / ssh o / scp .. O almeno fornisca un messaggio di avviso quando si copiano file binari di grandi dimensioni con / ssh. Prima di vedere la tua risposta, ho pensato che emacs non fosse pronto per copiare file di grandi dimensioni tramite vagabondo. (dato che ho usato solo / ssh)
xwl

2
In tal caso, imposta scpil metodo predefinito. Anche allora, Tramp copia file di piccole dimensioni tramite sshe file di grandi dimensioni tramite scp. È possibile personalizzare il limite tramite tramp-copy-size-limit.
Michael Albinus,

5
A partire da Emacs 26, un metodo è obbligatorio ora nei nomi di file remoti. Devi sempre dire /scp:host:/path/to/fileo /ssh:host:/path/to/file.
Michael Albinus,

0

Perché devi impostarlo nel ~/.emacsfile. Nonostante ciò, Emacs è un editor di testo, non un client SFTP o FTP, utilizza questa base64codifica mentre è in un sshmetodo che la rende troppo lenta per il trasferimento di file.


Siamo spiacenti, ma non è corretto. Come dice la risposta accettata, puoi fidarti di una selezione predefinita o prendere una decisione esplicita per ogni connessione. Se lo usi, sshhai ragione che è in atto una base64conversione che è lenta per i file di grandi dimensioni. Tuttavia, se lo usi scpnon è così. Emacs è in grado di eseguire comandi che non trattano il "testo". Infine, non rompere agli utenti Emacs che il loro sistema operativo preferito è un editor di testo;)
Chris

Già impostato con scpe la base64conversione ha continuato a verificarsi. Sarebbe apprezzabile se ciò non accadesse, una volta probabilmente sarebbe l'applicazione principale per le connessioni SFTP. Sebbene sia usato come editor di testo principale e file manager.
Ronald71,

Hai ragione, in qualche modo sono riuscito qui a farlo tramite scpmetodo, senza base64conversione, trasformandolo più velocemente.
Ronald71,

Questo è strano. Non avevo bisogno di alcuna impostazione speciale per scpnon usare la base64codifica. Potresti condividere rapidamente qual è stato il problema nel tuo caso per qualcuno che passerà qui in futuro?
Chris

Sono già riuscito a farlo, @Chris. Il problema principale era che la TRAMP diredconnessione era aperta tramite ssh, quindi era in esecuzione il scpcomando, che obbediva alla base64conversione. Quando esegue sia il TRAMP diredcomando di connessione sia il comando di copia stesso con il scpmetodo, ignora la base64conversione e procede più velocemente.
Ronald71
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.