วิธีเปรียบเทียบความแตกต่างระหว่างไดเรกทอรี (linux)


24

ฉันมีสองไดเรกทอรี - หนึ่งจากการสำรองข้อมูลก่อนหน้าและที่สองจากการสำรองข้อมูลใหม่ล่าสุด ฉันจะเปรียบเทียบการเปลี่ยนแปลงที่ทำกับไฟล์ในไดเรกทอรีจากข้อมูลสำรองล่าสุดบน Linux ได้อย่างไร นอกจากนี้ฉันจะแสดงการเปลี่ยนแปลงในไฟล์ข้อความและไฟล์ php ได้อย่างไร - ฉันกำลังคิดเกี่ยวกับบางอย่างเช่นประวัติการแก้ไขในวิกิพีเดียที่คุณเห็นรุ่นเก่าที่ด้านหนึ่งของหน้าจอและรุ่นใหม่ล่าสุดที่อื่น ๆ ฉันจะประสบความสำเร็จเช่นนั้นได้อย่างไร

แก้ไข: ฉันจะเปรียบเทียบdir ระยะไกลกับท้องถิ่นได้อย่างไร

คำตอบ:


35

จากหน้าคนต่าง:

หากทั้งจากไฟล์และไฟล์เป็นไดเรกทอรีให้เปรียบเทียบไฟล์ที่เกี่ยวข้องในทั้งสองไดเรกทอรีตามลำดับตัวอักษร การเปรียบเทียบนี้ไม่ได้เรียกซ้ำหากไม่มีการระบุตัวเลือก -r หรือ - recursive diff ไม่เคยเปรียบเทียบเนื้อหาจริงของไดเรกทอรีราวกับว่ามันเป็นไฟล์ ไฟล์ที่ระบุไว้อย่างสมบูรณ์อาจไม่ได้เป็นอินพุตมาตรฐานเนื่องจากอินพุตมาตรฐานนั้นไม่มีชื่อและไม่มีการใช้แนวคิดของไฟล์ '' ที่มีชื่อเหมือนกัน ''

ดังนั้นเพื่อเปรียบเทียบไดเรกทอรี: diff --brief -r dir1 dir2

ในการเปรียบเทียบไฟล์แบบเคียงข้างกัน: diff --side-by-side file1 file2


เย็นมากฉันจะให้มันลอง
ฟิล

... ฉันสงสัยว่าฉันจะเปรียบเทียบไดเรกทอรีระยะไกลกับท้องถิ่นได้อย่างไร
ฟิล

1
คุณจะต้องติดตั้งไดเรกทอรีระยะไกลไปยังเครื่องท้องถิ่น อย่างไรก็ตามคุณสามารถเปรียบเทียบไฟล์จากระยะไกลได้เช่น: ssh REMOTE_SERVER "cat / path / to / some / file" | diff - side-by-side / path-to-some-file - อีกอย่างหนึ่งคำสั่ง 'sdiff' ทำงานเหมือน 'diff --side-by-side' ถ้าคุณต้องการบันทึกการพิมพ์
ฌอน Staats

2
ใช้ NFS เพื่อเมาต์รีโมตไดเร็กทอรี บนรีโมตเซิร์ฟเวอร์ (server-b) ให้แก้ไข / etc / exports และใส่สิ่งต่อไปนี้ในนั้น: / path / of / directory / to / share server-a.ip.address (ro, no_root_squash) เริ่ม NFS บน server-b (/etc/init.d/nfs start) เมานต์ไปยังเซิร์ฟเวอร์ภายในเครื่องของคุณ (เซิร์ฟเวอร์ - a) โดยเพิ่มสิ่งต่อไปนี้ใน / etc / fstab: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 จากนั้นบนเซิร์ฟเวอร์ a, mkdir / mnt / server-b; mount / mnt / server-b ขอบคุณสำหรับ upvotes
ฌอน Staats

2
คุณสามารถใช้sshfsเพื่อสร้างไดเรกทอรีเครือข่ายชั่วคราวแบบเฉพาะกิจแทนที่จะใช้ NFS
Dan Andreatta

3

สมมติว่า:

  • เรากำลังwww1เปรียบเทียบกับระยะไกลwww2
  • มีการตรวจสอบคีย์สาธารณะจากท้องถิ่นwww1ถึงระยะไกลwww2
  • เราเปรียบเทียบเป็นผู้ใช้เดียวกันบนโลคัลwww1และรีโมตwww2
ค้นหา / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / excluse_this dir"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / แยกออก> remote.md5"
scp www2: remote.md5
diff local.md5 remote.md5 

3

คุณต้องการรวมพลังของrsyncการลดการใช้แบนด์วิดท์เข้ากับพลังของdiffการให้ความยืดหยุ่นที่แตกต่างกัน

ดังนั้นสิ่งนี้:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

ฉันเดาว่าคุณสามารถปรับแต่งได้เล็กน้อยถ้าคุณทำมันมักจะใช้rsyncแทนcpในบรรทัดแรก - เห็นได้ชัดว่าในบรรทัดสุดท้ายคุณมีอำนาจเต็มที่ในdiffการจัดรูปแบบตามที่คุณต้องการ อาจเป็นด้วย y ในเคส OPs

ข้อเสียของวิธีการนี้คือคุณลงเอยด้วยการใช้พื้นที่ในท้องถิ่นมากเป็นสองเท่า แต่อย่างน้อย $ 1 / gig ที่ใส่ใจ?


cp --reflink=auto --sparse=alwaysเพื่อใช้พื้นที่ไม่เพียงพอสำหรับการคัดลอกขึ้นอยู่กับ FS พื้นฐาน
Tom Hale

1

ทำdiff old_dir new_dir > diff.txtเพื่อความแตกต่างแบบเคียงข้างกันบนเซิร์ฟเวอร์เดียวกัน

สำหรับไฟล์ระยะไกล:

ตัวอย่างเช่น: ABC เป็นเซิร์ฟเวอร์ที่มีอยู่และ XYZ เป็นเซิร์ฟเวอร์ระยะไกลของคุณและชื่อไดเรกทอรีคือ 123

ขั้นตอนที่ 1: เปลี่ยนชื่อไดเรกทอรีที่มีอยู่ 123 บน ABC Server เป็น 123_ABC

ABC:/Home > mv 123 123_ABC

ขั้นตอนที่ 2: สร้างไดเรกทอรีใหม่บนเซิร์ฟเวอร์ ABC:

ABC: > mkdir 123_XYZ

ขั้นตอนที่ 3: คัดลอกไฟล์ทั้งหมดจากไดเรกทอรี 123 บนเซิร์ฟเวอร์ XYZ ไปยังไดเรกทอรี 123_XYZ บนเซิร์ฟเวอร์ ABC:

XYZ/123 > scp * userid@ABC: /123_XYZ

สิ่งนี้จะคัดลอกไฟล์ทั้งหมดจากไดเรกทอรีบนเซิร์ฟเวอร์ XYZ ของคุณไปยังเซิร์ฟเวอร์ ABC / 123_XYZ ของคุณ

ขั้นตอนที่ 4: ทำสิ่งที่แตกต่างระหว่างทั้งสองไดเรกทอรี:

ตอนนี้ไปที่เซิร์ฟเวอร์ ABC และดำเนินการต่างกันระหว่าง 123_ABC และ 123_XYZ

ABC > diff 123_ABC 123_XYZ > diff.txt

คำสั่งด้านบนจะบันทึกผลลัพธ์ต่าง ๆ ให้เป็น diff.txt ในเส้นทางเดียวกัน

คุณอาจเปรียบเทียบความแตกต่างแล้ว

ขอขอบคุณ,

Mehul


0

AIDE Advanced Intrusion Detection Environment (AIDE) เป็นตัวตรวจสอบความสมบูรณ์ของไฟล์สำหรับระบบปฏิบัติการ UNIX มีวัตถุประสงค์เพื่อให้การรายงานเกี่ยวกับความถูกต้องของข้อมูลในระบบไฟล์ที่รองรับ ด้วยการรัน AIDE หลายครั้งบนโฮสต์เป้าหมายคุณสามารถกำหนดไฟล์ที่จะเปลี่ยนแปลงได้ ด้วยการใช้งาน AIDE หลายครั้งบนโฮสต์ที่แตกต่างกันคุณสามารถกำหนดไฟล์และการอนุญาตต่าง ๆ ได้ จากนั้นใช้เครื่องมือ gui diff ในไฟล์ "different" ที่รายงาน

หรือใช้เครื่องมือ gui diff เช่น meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff หรือ xxdiff ไดเรกทอรีส่วนใหญ่จะทำแตกต่างจากส่วนต่างของไฟล์ คุณจะต้องติดตั้งไดรฟ์ระยะไกลโดยใช้ NFS, SMBFS หรือ SSHFS ตามที่คนอื่น ๆ พูดถึง


0

หรือคุณสามารถใช้สองไฟล์โดยไม่ใส่รายชื่อไฟล์ แล้วเปรียบเทียบสองไฟล์เหล่านั้น ตัวอย่างเช่น:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

ดาวน์โหลดไฟล์ใดไฟล์หนึ่ง

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 FILE.TXT  

ถึง FILE.TXT

ใช้ diff ( diff -y remote-files local-files > diff-files) เพื่อเปรียบเทียบข้างกัน เปิดไฟล์ต่าง ๆ และตรวจสอบ แต่ละบรรทัดที่มี> หมายถึงไฟล์อื่น

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