ฉันต้องการเปรียบเทียบสองไดเรกทอรีไดเรกทอรีหนึ่งอยู่ในท้องถิ่นและอีกไดเรกทอรีหนึ่งอยู่ในเครื่องอื่น
ฉันจะทำสิ่งนั้นได้อย่างไร ฉันสามารถทำได้ด้วย diff
?
ฉันต้องการเปรียบเทียบสองไดเรกทอรีไดเรกทอรีหนึ่งอยู่ในท้องถิ่นและอีกไดเรกทอรีหนึ่งอยู่ในเครื่องอื่น
ฉันจะทำสิ่งนั้นได้อย่างไร ฉันสามารถทำได้ด้วย diff
?
คำตอบ:
ฉันนึกถึงสองวิธีที่นี่ ..
เมานต์รีโมตไดเร็กทอรีของคุณแบบโลคัลจากนั้นใช้ diff ตามที่คุณต้องการบนเครื่องโลคัล
ใช้ rsync
:
rsync -avz --dry-run remote-user@remote-machine:remote-dir local-dir
นี่จะแสดงไฟล์ที่แตกต่าง แต่จะไม่แสดงให้คุณเห็นตามจริง diff
. ฉันคิด ความพร้อมเพรียงกัน รองรับ diff ต่างกัน แต่ฉันไม่เคยใช้มันและมันดูเหมือนจะไม่อยู่ระหว่างการพัฒนาอีกต่อไป
rsync
ด้วยตัวเลือกด้านบน -avz
จะไม่ให้ผลลัพธ์เกี่ยวกับไฟล์ในเครื่องที่สอง ( local-dir
) ที่ไม่ได้อยู่ในไดเรกทอรีท้องถิ่น นี่อาจเป็นสิ่งที่ @ EngAl-Rawabdeh แปลว่า 'ทิศทางเดียว' คุณสามารถใช้ --delete
ตัวเลือกเพื่อให้ดูไฟล์ที่มีอยู่เฉพาะใน local-dir
.
หากคุณเพียงต้องการตรวจสอบว่าพวกเขาเหมือนกันหรือไม่บางอย่างเช่น
cd <directory>
find . -type f | sort | xargs sha1sum | sha1sum
... ควรให้การตรวจสอบครั้งเดียวแก่คุณกับเนื้อหาทั้งหมด (ยกเว้นไดเรกทอรีย่อยที่ว่างเปล่า) ดังนั้นคุณสามารถเรียกใช้สิ่งนี้กับทั้งสองเครื่องและเปรียบเทียบผลลัพธ์
สังเกตว่าการใช้ diff
จะต้องใช้เนื้อหาทั้งหมดของรีโมตไดเร็กทอรีเพื่อถ่ายโอนผ่านเครือข่ายซึ่งอาจช้าลงอย่างมากหากมีไฟล์ขนาดใหญ่หรือไฟล์จำนวนมากที่เกี่ยวข้อง
คำแนะนำของฉันคือการกำหนดไฟล์ที่แตกต่างกันระหว่างสองเครื่องก่อน (โดยใช้ rsync -n --delete
( -n
ทำให้บอกเพียงว่าคุณต้องทำอะไร แต่ไม่ได้ทำจริงๆ --delete
จะบอกคุณว่ามีไฟล์ใดบ้างที่อยู่ในปลายทาง แต่ไม่ได้อยู่ในแหล่งที่มาเพราะจะต้องการลบไฟล์เหล่านั้น) หรือโดยการเปรียบเทียบ md5sum
s หากคุณกำลังมองหา อย่างไร พวกเขาแตกต่างกัน (มากกว่าเพียงแค่ ถ้า พวกเขาแตกต่างกัน) ฉันก็จะใช้ diff
เฉพาะไฟล์ที่เฉพาะเจาะจงเหล่านั้นเพื่อดูความแตกต่าง
ใช่คุณสามารถทำได้ด้วย diff! แอปพลิเคชันพื้นที่ผู้ใช้เช่น "diff" ไม่ทราบ (และไม่จำเป็นต้องรู้) หากไดเรกทอรีเป็นแบบโลคัลหรือรีโมต
ฉันพบเครื่องมือชื่อ "UNISON" มันเป็นเครื่องมือที่ดีมากและมีตัวเลือกมากมาย
diff
โดยใช้พร้อมเพรียง แต่ปัญหาพร้อมเพรียงมันไม่สามารถทำได้diff
ไม่มีโฟลเดอร์ซิงค์