Tramp / Dired chuyển các tập tin nội tuyến qua ssh thay vì sử dụng scp externaly


12

Tôi đang sử dụng tramp qua ssh để truy cập các tập tin từ xa. Đối với các tệp văn bản, điều này hoạt động rất tốt, nhưng bất cứ khi nào tôi muốn sao chép các tệp từ xa lớn hơn vào máy cục bộ của mình, tramp sử dụng phương thức nội tuyến chậm của nó (mã hóa tệp bằng gzip). Điều này chậm hơn nhiều so với sử dụng một phương thức bên ngoài như ví dụ scp. Làm cách nào để tôi tạo emacs sử dụng scp khi chuyển các tệp lớn?

Thông tin liên quan:

  • Tôi sử dụng tệp ~ / .ssh / config để truy cập vào máy từ xa. Bí danh cho máy đó là hehi09 sau đây. Truy cập không có mật khẩu

  • Tin nhắn trong bộ đệm tin nhắn khi chuyển:

    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)'...
    
  • Giá trị của:

    • Giá trị giới hạn của tramp-copy-size-size là 10240 (nhỏ hơn nhiều so với kích thước tệp được kiểm tra)

    • Giá trị của phương thức tramp-default-method là "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ hoạt động như mong đợi từ dòng lệnh và nhanh hơn nhiều so với chuyển trong emacs

Bất kỳ ý tưởng tại sao emacs không sử dụng scp để sao chép các tệp lớn? Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

Câu trả lời:


17

Khi bạn nói "Tôi đang sử dụng tramp qua ssh", tôi cho rằng bạn mở một tập tin như thế nào /ssh:host:/path/to/file. Điều này được cho là luôn luôn sử dụng phương pháp ssh. Nếu bạn muốn sử dụng phương pháp scp, bạn sẽ sử dụng /scp:host:/path/to/file. Điều này sử dụng tự động ssh cho các tệp ngắn và scp cho các tệp lớn. Nếu bạn tin tưởng phương thức mặc định được đặt tramp-default-method, bạn có thể sử dụng phương thức ngắn hơn /host:/path/to/file.


Sẽ thật tuyệt khi nó luôn sử dụng cả ssh và scp khi sao chép tệp, bất kể là / ssh hay / scp .. Hoặc ít nhất là đưa ra một số thông báo cảnh báo khi sao chép nhị phân lớn bằng / ssh. Trước khi nhìn thấy câu trả lời của bạn, tôi nghĩ emacs chưa sẵn sàng để sao chép các tệp lớn thông qua tramp. (vì tôi chỉ sử dụng / ssh)
xwl

2
Trong trường hợp đó, làm cho scpphương thức mặc định của bạn. Thậm chí sau đó, Tramp sao chép các tệp nhỏ thông qua sshvà các tệp lớn thông qua scp. Bạn có thể tùy chỉnh giới hạn thông qua tramp-copy-size-limit.
Michael Albinus

4
Kể từ Emacs 26, một phương thức bắt buộc hiện có trong tên tệp từ xa. Bạn phải luôn luôn nói /scp:host:/path/to/filehay /ssh:host:/path/to/file.
Michael Albinus

0

Bởi vì bạn phải đặt nó trong ~/.emacstập tin. Mặc dù vậy, Emacs là một trình soạn thảo văn bản, không phải là máy khách SFTP hay FTP, nó sử dụng base64mã hóa này trong khi trong sshphương thức chuyển quá chậm để truyền tệp.


Xin lỗi, nhưng điều đó không chính xác. Vì câu trả lời được chấp nhận cho biết bạn có thể tin tưởng vào lựa chọn mặc định hoặc đưa ra quyết định rõ ràng cho mọi kết nối. Nếu bạn sử dụng, sshbạn chính xác rằng một base64chuyển đổi đang diễn ra chậm đối với các tệp lớn. Tuy nhiên, nếu bạn sử dụng scpđó không phải là trường hợp. Emacs có khả năng thực thi các lệnh không xử lý "văn bản". Cuối cùng, đừng chia sẻ với người dùng Emacs rằng hệ điều hành yêu thích của họ là trình soạn thảo văn bản;)
Chris

Đã thiết lập nó với scpbase64chuyển đổi tiếp tục kéo dài. Sẽ rất đáng trân trọng nếu điều đó không xảy ra, một khi nó có thể là ứng dụng chính cho các kết nối SFTP. Mặc dù nó được sử dụng như trình soạn thảo văn bản chính và trình quản lý tệp.
Ronald71

Bạn nói đúng, bằng cách nào đó quản lý ở đây để thực hiện thông qua scpphương thức, mà không cần base64chuyển đổi, biến nó nhanh hơn.
Ronald71

Điều đó lạ thật. Tôi không cần bất kỳ cài đặt đặc biệt nào scpđể không sử dụng base64mã hóa. Bạn có thể nhanh chóng chia sẻ vấn đề trong trường hợp của bạn cho bất kỳ ai ghé qua đây trong tương lai không?
Chris

Đã quản lý để làm điều đó, @Chris. Vấn đề chính là TRAMP diredkết nối được mở thông qua ssh, sau đó đang chạy scplệnh, bắt buộc phải base64chuyển đổi. Khi chạy cả TRAMP diredkết nối và sao chép lệnh cả hai với scpphương thức, nó bỏ qua base64chuyển đổi và thực hiện nhanh hơn.
Ronald71
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.