Tramp / Dired ถ่ายโอนไฟล์แบบอินไลน์ผ่าน ssh แทนที่จะใช้ scp externaly


12

ฉันใช้คนจรจัดผ่าน ssh เพื่อเข้าถึงไฟล์ระยะไกล สำหรับไฟล์ข้อความสิ่งนี้ใช้ได้ดีจริงๆ แต่เมื่อใดก็ตามที่ฉันต้องการคัดลอกไฟล์ระยะไกลที่มีขนาดใหญ่กว่าไปยังเครื่องของฉันคนจรจัดใช้วิธีการอินไลน์ช้า (เข้ารหัสไฟล์ด้วย gzip) นี่จะช้ากว่าการใช้วิธีการภายนอกเช่นตัวอย่าง scp ฉันจะทำให้ emacs ใช้ scp เมื่อถ่ายโอนไฟล์ขนาดใหญ่ได้อย่างไร

ข้อมูลที่เกี่ยวข้อง:

  • ฉันใช้ไฟล์ ~ / .ssh / config เพื่อเข้าถึงเครื่องระยะไกล นามแฝงสำหรับเครื่องนั้นคือ hehi09 ในรายการต่อไปนี้ การเข้าถึงเป็นรหัสผ่านน้อย

  • ข้อความในบัฟเฟอร์ข้อความเมื่อถ่ายโอน:

    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)'...
    
  • ค่าของ:

    • ค่า จำกัด ของ tramp-copy-size-10240 (เล็กกว่าขนาดไฟล์ทดสอบ)

    • ค่าของเมธอด tramp เริ่มต้นคือ "scp"

  • $ scp hehi09:/home/christian/big_file.dat ~/ ทำงานได้ตามที่คาดหวังจากบรรทัดคำสั่งและเร็วกว่าการถ่ายโอนใน emacs

ความคิดใด ๆ ที่ทำให้ emacs ไม่ได้ใช้ scp เพื่อคัดลอกไฟล์ขนาดใหญ่? ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก!

คำตอบ:


17

เมื่อคุณพูดว่า "ฉันใช้จรจัดผ่าน SSH" /ssh:host:/path/to/fileฉันคิดว่าคุณเปิดแฟ้มเช่น นี่ควรใช้เมธอด ssh เสมอ หากคุณต้องการที่จะใช้วิธี SCP /scp:host:/path/to/fileคุณจะต้องใช้ ใช้ ssh สำหรับไฟล์สั้นโดยอัตโนมัติและ scp สำหรับไฟล์ขนาดใหญ่ หากคุณเชื่อถือวิธีการเริ่มต้นที่ตั้งไว้tramp-default-methodคุณสามารถใช้วิธีที่สั้นกว่า/host:/path/to/fileนี้ได้


มันจะดีที่จะใช้ทั้ง ssh และ scp เสมอเมื่อทำการคัดลอกไฟล์โดยไม่คำนึงว่า / ssh หรือ / scp .. หรืออย่างน้อยก็ให้ข้อความเตือนบางอย่างเมื่อทำการคัดลอกไบนารีขนาดใหญ่ด้วย / ssh ก่อนเห็นคำตอบของคุณฉันคิดว่า emacs ไม่พร้อมสำหรับการคัดลอกไฟล์ขนาดใหญ่ผ่านทางคนจรจัด (ตั้งแต่ฉันใช้ / ssh เท่านั้น)
xwl

2
ในกรณีนั้นให้scpใช้วิธีการเริ่มต้นของคุณ แล้วถึงแม้ไฟล์จรจัดสำเนาขนาดเล็กผ่านและไฟล์ขนาดใหญ่ผ่านทางssh scpคุณสามารถกำหนดขีด จำกัด tramp-copy-size-limitผ่านทาง
Michael Albinus

5
ในฐานะของ Emacs 26 วิธีการบังคับใช้ในชื่อไฟล์ระยะไกลในขณะนี้ คุณมักจะต้องบอกหรือ/scp:host:/path/to/file /ssh:host:/path/to/file
Michael Albinus

0

เพราะคุณต้องตั้งค่าใน~/.emacsไฟล์ แม้จะเป็นเช่นนั้น Emacs เป็นโปรแกรมแก้ไขข้อความไม่ใช่ SFTP หรือไคลเอนต์ FTP แต่ก็ใช้การbase64เข้ารหัสนี้ในขณะที่sshวิธีการเปลี่ยนช้าเกินไปสำหรับการถ่ายโอนไฟล์


ขออภัย แต่ไม่ถูกต้อง ในฐานะที่เป็นคำตอบที่ได้รับการยอมรับบอกว่าคุณสามารถเชื่อถือการเลือกเริ่มต้นหรือตัดสินใจอย่างชัดเจนสำหรับการเชื่อมต่อทุกครั้ง ถ้าคุณใช้sshคุณจะถูกต้องว่าการbase64แปลงจะเกิดขึ้นซึ่งช้าสำหรับไฟล์ขนาดใหญ่ อย่างไรก็ตามถ้าคุณใช้scpนั่นไม่ใช่กรณี Emacs สามารถใช้คำสั่งที่ไม่เกี่ยวข้องกับ "text" สุดท้ายอย่าทำลายมันให้กับผู้ใช้ Emacs ว่าระบบปฏิบัติการโปรดของพวกเขาคือโปรแกรมแก้ไขข้อความ;)
Chris

ตั้งค่าแล้วด้วยscpและbase64การแปลงจะเกิดขึ้น จะได้รับการประเมินหากไม่เกิดขึ้นเมื่อเป็นไปได้ว่าแอปพลิเคชันหลักสำหรับการเชื่อมต่อ SFTP แม้ว่ามันจะใช้เป็นตัวแก้ไขข้อความหลักและตัวจัดการไฟล์
Ronald71

คุณพูดถูกวิธีนี้ทำได้scpโดยไม่ต้องมีbase64การแปลงทำให้เร็วขึ้น
Ronald71

นั่นเป็นเรื่องแปลก ฉันไม่ต้องการการตั้งค่าพิเศษสำหรับที่scpจะไม่ใช้การbase64เข้ารหัส คุณสามารถแบ่งปันสิ่งที่เป็นปัญหาในกรณีของคุณกับใครก็ได้ที่นี่ในอนาคต
Chris

จัดการเรียบร้อยแล้ว @Chris ปัญหาหลักคือการTRAMP diredเชื่อมต่อที่เปิดผ่านsshจากนั้นก็ใช้scpคำสั่งซึ่งการbase64แปลง เมื่อเรียกใช้ทั้งTRAMP diredการเชื่อมต่อและคัดลอกคำสั่งทั้งสองด้วยscpวิธีการมันไม่สนใจการbase64แปลงและทำได้เร็วขึ้น
Ronald71
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.