ความแตกต่างและการเชื่อมโยงแบบเรียกซ้ำ


4

ฉันพยายามที่จะ diff สองไดเรกทอรีใช้ diff(ดี) อย่างไรก็ตามdiffตามจริงแล้ว symlink และเปรียบเทียบความแตกต่างระหว่างไฟล์เป้าหมาย ฉันไม่สามารถหาวิธีที่จะไม่diffทำเช่นนี้ แต่สิ่งที่ฉันอยากรู้คือเป้าหมายนั้นเหมือนกัน (หรือแตกต่างกันสำหรับเรื่องนั้น) กล่าวอีกนัยหนึ่งถ้า symlinks ชี้ไปที่ไฟล์เดียวกัน (ในความคิดของฉัน) พวกเขาเหมือนกันมิฉะนั้นจะแตกต่างกันและนั่นคือทั้งหมดที่ฉันต้องการdiffบอกฉันเมื่อมันมาถึง symlink ระหว่างการเรียกซ้ำ

ฉันได้ลองค้นหาทางออนไลน์ แต่ฉันสามารถค้นหาหัวข้อที่เกี่ยวข้องกับการจัดการกับ symlink เพียงอย่างเดียวหรือไม่สนใจเลยก็ได้

คำตอบ:



1

หากคุณเพิ่มบรรทัดเช่น:

dir1/synlinkyfile.txt
config.mk

ไปยังไฟล์ .ignore-diff

จากนั้นคุณสามารถดำเนินการdiff(1)เช่นนี้:

diff -ur -X .ignore-diff

สิ่งที่ฉันอยากจะแนะนำก็คือสร้างไฟล์ที่ไม่ต้องสนใจ

find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^  File: \`//" | sed s/\'.*// >.ignore-diff

ค้นหา symlink ทั้งหมดในไดเรกทอรีย่อยรับบรรทัดที่เกี่ยวข้องเรียงลำดับ (ฉันชอบสิ่งที่เรียงตามตัวอักษร) และต้มลงในพา ธ ไฟล์ธรรมดาแบบง่ายสำหรับไฟล์ที่เป็น symlink จริง มันเสร็จสิ้นการเปลี่ยนเส้นทางไปสู่ ​​.ignore-diff

แน่นอนว่ายังมีความเป็นไปได้ในการทำ. signore แล้วทำการค้นหาเดียวกันนั้นอีกครั้ง แต่การถอด sed ครั้งสุดท้ายและเพิ่ม seds อีกสองสามตัวเพื่อนำออกทั้งหมดยกเว้นปลายทาง

find . -type l -exec stat '{}' '+' | grep 'File:' | sort | sed "s/^  File: \`//" | sed "s/.*-> \`//" | sed "s/'//g" | sed s/\`// > symlinks-dest

ทำเช่นนั้นสำหรับแต่ละ dir จากนั้นคุณสามารถกระจายไฟล์ symlink-dest ทั้งสองนั้นเพื่อเปรียบเทียบปลายทางของ symlink


ขอบคุณ PsychoData ดูเหมือนว่าจะเป็นทางออกที่สมเหตุสมผล (ในทางทฤษฎี)
Ash

ไม่แน่ใจว่าจะใช้เวลาในการค้นหานานเท่าใดในการประมวลผลในไดเรกทอรีที่มีขนาดใหญ่เท่ากับของฉัน
Ash

ดูเหมือนว่าจะมีปัญหากับการทำงานต่างกันโดยใช้ไฟล์ 'ละเว้น' หลังจากเล่นกับสิ่งที่คุณแนะนำแล้วปรากฎว่าการเพิ่มบางอย่างเช่น <dir> / <file> ไปยัง. signore-diff ไม่ทำงาน การเพิ่ม <file> เป็นเพียงแค่การทำงาน นี่คือปัญหา. จะเกิดอะไรขึ้นถ้าฉันมีไฟล์ชื่อ <file> ในไดเรกทอรีย่อยที่อื่นซึ่งฉันไม่ต้องการเพิกเฉย
Ash
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.