ฉันจะเปรียบเทียบสองไดเรกทอรีโดยหนึ่งเป็นไดเรกทอรีระยะไกลได้อย่างไร


7

ฉันต้องการเปรียบเทียบสองไดเรกทอรีไดเรกทอรีหนึ่งอยู่ในท้องถิ่นและอีกไดเรกทอรีหนึ่งอยู่ในเครื่องอื่น

ฉันจะทำสิ่งนั้นได้อย่างไร ฉันสามารถทำได้ด้วย diff?

คำตอบ:


4

ฉันนึกถึงสองวิธีที่นี่ ..

  1. เมานต์รีโมตไดเร็กทอรีของคุณแบบโลคัลจากนั้นใช้ diff ตามที่คุณต้องการบนเครื่องโลคัล

  2. ใช้ rsync:

rsync -avz --dry-run remote-user@remote-machine:remote-dir local-dir

นี่จะแสดงไฟล์ที่แตกต่าง แต่จะไม่แสดงให้คุณเห็นตามจริง diff. ฉันคิด ความพร้อมเพรียงกัน รองรับ diff ต่างกัน แต่ฉันไม่เคยใช้มันและมันดูเหมือนจะไม่อยู่ระหว่างการพัฒนาอีกต่อไป


1
ปัญหาใน rsync มันทำงานในทิศทางเดียว ฉันใช้พร้อมเพรียงก่อนฉันค้นหาวิธีที่ฉันสามารถทำได้ diff โดยใช้พร้อมเพรียง แต่ปัญหาพร้อมเพรียงมันไม่สามารถทำได้ diff ไม่มีโฟลเดอร์ซิงค์

หากคุณสลับลำดับของไดเรกทอรีใน rsync มันจะทำงานในทางอื่น
Hari Menon

3
ฉันไม่เข้าใจความคิดเห็นเกี่ยวกับการทำงานในทิศทางเดียว การเหมือนกันคือการสลับ - ถ้า A เหมือนกันกับ B ดังนั้น B จะเหมือนกับ A; ถ้า A แตกต่างจาก B ดังนั้น B จะแตกต่างจาก A ถ้าคุณแค่มองหาว่าพวกมันเหมือนกันหรือไม่ก็ไม่มีทิศทาง
Dave Sherohman

เดฟฉันหมายถึงมันเป็นการเปรียบเทียบที่ทำโดยอ้างอิงจากตัวอย่างไฟล์เดียว (การเปรียบเทียบที่จำเป็นระหว่าง A และ B ถ้า rsync ใช้ "A" เป็นข้อมูลอ้างอิงและเปรียบเทียบ B กับ "A" ถึงแม้ว่า A จะเก่ากว่า B
Eng Al-Rawabdeh

rsync ด้วยตัวเลือกด้านบน -avz จะไม่ให้ผลลัพธ์เกี่ยวกับไฟล์ในเครื่องที่สอง ( local-dir ) ที่ไม่ได้อยู่ในไดเรกทอรีท้องถิ่น นี่อาจเป็นสิ่งที่ @ EngAl-Rawabdeh แปลว่า 'ทิศทางเดียว' คุณสามารถใช้ --delete ตัวเลือกเพื่อให้ดูไฟล์ที่มีอยู่เฉพาะใน local-dir.
JellicleCat

3

หากคุณเพียงต้องการตรวจสอบว่าพวกเขาเหมือนกันหรือไม่บางอย่างเช่น

cd <directory>
find . -type f | sort | xargs sha1sum | sha1sum

... ควรให้การตรวจสอบครั้งเดียวแก่คุณกับเนื้อหาทั้งหมด (ยกเว้นไดเรกทอรีย่อยที่ว่างเปล่า) ดังนั้นคุณสามารถเรียกใช้สิ่งนี้กับทั้งสองเครื่องและเปรียบเทียบผลลัพธ์


1

สังเกตว่าการใช้ diff จะต้องใช้เนื้อหาทั้งหมดของรีโมตไดเร็กทอรีเพื่อถ่ายโอนผ่านเครือข่ายซึ่งอาจช้าลงอย่างมากหากมีไฟล์ขนาดใหญ่หรือไฟล์จำนวนมากที่เกี่ยวข้อง

คำแนะนำของฉันคือการกำหนดไฟล์ที่แตกต่างกันระหว่างสองเครื่องก่อน (โดยใช้ rsync -n --delete ( -n ทำให้บอกเพียงว่าคุณต้องทำอะไร แต่ไม่ได้ทำจริงๆ --delete จะบอกคุณว่ามีไฟล์ใดบ้างที่อยู่ในปลายทาง แต่ไม่ได้อยู่ในแหล่งที่มาเพราะจะต้องการลบไฟล์เหล่านั้น) หรือโดยการเปรียบเทียบ md5sum s หากคุณกำลังมองหา อย่างไร พวกเขาแตกต่างกัน (มากกว่าเพียงแค่ ถ้า พวกเขาแตกต่างกัน) ฉันก็จะใช้ diff เฉพาะไฟล์ที่เฉพาะเจาะจงเหล่านั้นเพื่อดูความแตกต่าง


0

ใช่คุณสามารถทำได้ด้วย diff! แอปพลิเคชันพื้นที่ผู้ใช้เช่น "diff" ไม่ทราบ (และไม่จำเป็นต้องรู้) หากไดเรกทอรีเป็นแบบโลคัลหรือรีโมต


คุณหมายถึงฉันสามารถใช้ ssh ได้หรือไม่?

0

ฉันพบเครื่องมือชื่อ "UNISON" มันเป็นเครื่องมือที่ดีมากและมีตัวเลือกมากมาย

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