ใช้ความแตกต่างระหว่างไฟล์โลคัลและรีโมต


39

ฉันเชื่อมต่อกับโฮสต์ผ่านทางsshและฉันต้องการเปรียบเทียบ (สมมติว่าdiff) ไฟล์ config บางไฟล์เทียบกับโฮสต์อื่นในโฮสต์อื่นเข้าถึงได้ผ่านทางsshโดยไม่ต้องดาวน์โหลดไฟล์ระยะไกลด้วยตนเองก่อนที่จะเรียกใช้ diff


คุณสามารถเมานต์รีโมตไดเร็กทอรีโดยใช้SSHFSจากนั้นเข้าถึงราวกับว่าเป็นโลคัล
Barmar

คำตอบ:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

แหล่ง


1
ไปป์ไม่เพียงแค่ดาวน์โหลดผลลัพธ์catซึ่งอันที่จริงเป็นเพียงไฟล์ต้นฉบับ?
Stijn de Witt

1
ไพพ์จะส่งผลลัพธ์ของsshคำสั่งรีโมตไปที่diffซึ่งกำลังรอการเปรียบเทียบstdinกับ localfile
fduff

1
บางทีฉันอาจตีความข้อกำหนด 'โดยไม่ต้องดาวน์โหลดไฟล์ระยะไกล' ฉันเดาว่า OP หมายถึง 'ไม่ต้องดาวน์โหลดไฟล์ระยะไกลด้วยตนเอง' :) แก้ไข: อ้าคุณเป็นโอเพ่น :)
Stijn de Witt

@StijndeWitt ใช่ฉันต้องการที่จะหลีกเลี่ยงการ scp ไฟล์ระยะไกลครั้งแรกแล้วทำ diff .. ที่
fduff

18

ลอง:

diff local_file <(ssh user@server 'cat remote_file')

หรือใช้vimdiff:

vimdiff local_file scp://server//path/to/remote_file

ใช้diff local_file <(ssh user@server 'cat remote_file')งานได้กับ SSH ที่ไม่มีรหัสผ่านหรือไม่ ดูเหมือนว่าฉันจะไม่ได้รับพร้อมท์รหัสผ่าน ...
sdbbs

1
@sdbbs: การทดแทนกระบวนการทำงานในเบื้องหลังและเอาต์พุตมาตรฐานถูกเขียนไปที่ไพพ์ที่มีชื่อ (หรือไพพ์ที่มีชื่อไม่ระบุชื่อ) ดังนั้นคุณจะไม่ได้รับพรอมต์รหัสผ่าน ลองcat <(ssh user@server 'cat remote_file')และcat < <(ssh user@server 'cat remote_file')ดูความแตกต่าง
cuonglm

9

บางทีนี่อาจจะไม่เป็นประโยชน์ในกรณีของคุณ แต่ฉันมักจะใช้

sum -r

ในแต่ละเครื่องและเปรียบเทียบเช็คซัมด้วยตนเอง ที่ช่วยให้การเปรียบเทียบไฟล์แม้ว่าพวกเขาจะไม่สามารถเข้าถึงได้ผ่านการเชื่อมต่อ ssh แน่นอนคำตอบทั้งหมดคือ "พวกเขาเหมือนกัน" แต่บ่อยครั้งที่เพียงพอสำหรับความต้องการของฉัน นอกจากนี้ยังทำให้ง่ายต่อการตรวจสอบว่าไฟล์เดียวเหมือนกันในเครื่อง 3 หรือ 4 หรือมากกว่า


2
ฉันสามารถจินตนาการได้ว่าสำหรับไฟล์ขนาดใหญ่หรือการเชื่อมต่อที่ช้านี่อาจมีประโยชน์มาก มันบันทึกการดาวน์โหลดไฟล์ทั้งหมดเมื่อไฟล์แตกต่างกันจริง สคริปเตอร์ Bash ที่ดีกว่าตัวฉันเองอาจรวมคำตอบนี้กับคำตอบข้างต้นที่เกี่ยวข้องกับรีโมตcatเพื่อเรียกใช้catคำสั่งจริงเมื่อได้รับการพิจารณาแล้วว่าไฟล์ต่างกัน
Stijn de Witt

1
ผู้บังคับบัญชาinfo coreutils 'sum invocation'กล่าวว่าอนึ่ง: "'ผลรวม' มีไว้เพื่อความเข้ากันได้โปรแกรม 'cksum' (ดูหัวข้อถัดไป) จะดีกว่าในแอปพลิเคชันใหม่"
Teemu Leisti

1

หากคุณต้องการวิธีการมองเห็นที่ชัดเจนยิ่งขึ้นในเซสชันเทอร์มินัลของคุณ ผู้บัญชาการเที่ยงคืนมีตัวเลือกระบบไฟล์ระยะไกล (ตัวเลือก SFTP ลิงค์ ... ในเมนู) และตัวเลือกการเปรียบเทียบไฟล์ภาพ ไม่ได้ติดตั้งตามค่าเริ่มต้นในระบบ Linux ส่วนใหญ่ แต่มีอยู่ในที่เก็บฐานส่วนใหญ่ ขั้นตอน:

  1. เริ่มต้นผู้บัญชาการเที่ยงคืน (คำสั่ง:) mcในโฟลเดอร์ที่มีไฟล์ที่จะเปรียบเทียบ
  2. ในอีกด้านหนึ่ง (เช่นเมนูด้านขวา ) สร้างลิงก์ sftp ไปยังเซิร์ฟเวอร์อื่นที่โฟลเดอร์เดียวกัน ( sftp://<user>@<servername>/<path>)
  3. การใช้insปุ่มเลือก / ไฮไลต์ไฟล์ที่จะทำการเปรียบเทียบ ( tabการเปลี่ยนแปลงระหว่างแผงด้านซ้ายและขวา)
  4. ในเมนูคำสั่งเลือกเปรียบเทียบไฟล์

หมายเหตุ:โดยปกติเมนูผู้บัญชาการเที่ยงคืนสามารถเข้าถึงได้โดยใช้เมาส์ในเทอร์มินัลเซสชันของคุณ มันไม่ทำงานF9ทำให้คุณได้รับในเมนูด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.