วิธีเปรียบเทียบสองไดเรกทอรี (รวมถึงไดเรกทอรีย่อย) สำหรับความแตกต่าง


14

ฉันจะเปรียบเทียบสองไดเรกทอรีกับ dirs ย่อยเพื่อดูความแตกต่างได้อย่างไร


6
โปรดใช้ระบบปฏิบัติการ
Maximus Minimus

คุณต้องการที่จะรู้หรือไม่ว่ามีไฟล์ต่างกันระหว่างสองไดเรกทอรีหรือถ้าเนื้อหาของไฟล์ต่างกัน?
Matt Simmons

คำตอบ:


20

ภายใต้ Linux:

$ diff -r /first/directory /second/directory

ใน Windows: คุณน่าจะดาวน์โหลดและติดตั้ง WinMerge ได้ดีกว่า

> WinMerge /r c:\first\folder c:\second\folder

M


3
ฉันใช้ diff -qrl ตอนนี้ ...
alexus

1
มีตัวเลือกใน GUI เพื่อระบุสวิตช์ / r โดยไม่ใช้พรอมต์คำสั่งหรือไม่
Omtara

@Omtara หลังจากที่คุณเริ่ม WinMerge แล้วให้เลือกไฟล์ - เปิด ในช่องโต้ตอบที่เปิดอยู่ให้เลือก // รวมโฟลเดอร์ย่อย // หากคุณเปิด WinMerge โดยเลือกสองโฟลเดอร์ใน Windows Explorer ให้กำหนดค่าการรวมเชลล์ เปิดแก้ไข - ตัวเลือก นำทางไปยังหมวดหมู่ // การรวมเชลล์และตรวจสอบ // รวมโฟลเดอร์ย่อยโดยค่าเริ่มต้น //
R. Schreurs

2

ฉันใช้meldกับ Ubuntu - มีตัวเลือกการเปรียบเทียบไดเรกทอรีที่ดี


+1 สำหรับ meld ปกติฉันชอบตัวเลือกบรรทัดคำสั่งเช่น diff แต่สามารถมองเห็นโฟลเดอร์ที่แตกต่างกันจริง ๆ ของไดเรกทอรีที่แตกต่างกันสองรายการได้อย่างรวดเร็วในลักษณะที่เป็นภาพนั้นมีประโยชน์มาก ทั้ง meld และ diff ยังคงใช้งานได้ดีบน Ubuntu 16.04 และ Ubuntu 18.04 สำหรับใครก็ตามที่พบสิ่งนี้ในปี 2018 แน่นอนว่าบน Windows WinMerge เป็นตัวเลือกที่ยอดเยี่ยม ฉันเคยได้ยิน Meld ทำงานบน Windows แล้ว แต่ฉันยังไม่ได้ลองเลย
เคน

1

Beyond Compare เป็นเครื่องมือเชิงพาณิชย์ที่ดีราคา $ 30 หรือมากกว่านั้น ทำงานภายใต้ windows มีรุ่น eval http://www.scootersoftware.com/


1

สำหรับ Windows ฉันเชื่อว่า Windiff ใช้งานได้ แต่Winmergeเป็นเครื่องมือที่ฉันเลือกใช้สำหรับงานนี้ มันเป็นโอเพ่นซอร์สและทำงานอย่างเรียบร้อยมากเมื่อเปรียบเทียบไดเร็คทอรี่ต้นไม้สองชุด

แก้ไข: โอ๊ะโอถูกโจมตีโดย Marius


1

ปกติจะใช้ Diff เพื่อเปรียบเทียบสองไฟล์ แต่สามารถทำได้มากกว่านั้น ในdiffตัวเลือกของเขา "r" และ "q" ทำให้มันทำงานซ้ำ ๆ และเงียบ ๆ นั่นคือพูดถึงความแตกต่างเท่านั้นซึ่งเป็นสิ่งที่เรากำลังมองหา:

diff -rq todo_orig/ todo_backup/

หากคุณต้องการเห็นความแตกต่างของไฟล์ที่อาจไม่มีอยู่ในไดเรกทอรีใด:

diff -Nrq dir1/ dir2/

คุณสามารถยังใช้และRsync findสำหรับfind:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

แต่ไฟล์ที่มีชื่อเดียวกันและในโฟลเดอร์ย่อยเดียวกัน แต่มีเนื้อหาต่างกันจะไม่ปรากฏในรายการ

หากคุณเป็นแฟนของ GUI คุณสามารถตรวจสอบMeldได้ มันทำงานได้ดีทั้งใน windows และ linux


0

DiffMerge สำหรับ Windows แสดงความแตกต่างรวมถึงโฟลเดอร์ย่อยในหน้าต่าง นอกจากนี้ยังมีรุ่นพกพาบางแห่ง แต่การค้นหาอย่างรวดเร็วเปิดเผยดาวน์โหลดนี้: http://www.softpedia.com/get/System/File-Management/SourceGear-DiffMerge.shtml


0

ฉันเขียนสิ่งนี้โดยใช้การเปรียบเทียบวัตถุ cmdlet ใน Powershell:

#set the directories 
$firstdirectory = Read-Host "What is the first directory you wish to compare?" $seconddirectory = Read-Host "What is the second directory you wish to compare?"

#Check if the user wants to compare subdirectories 
$recursivesearch = Read-Host "Do you wish to compare subdirectories? Please enter yes or no." If ($recursivesearch -eq "yes") 

#get the contents 
{ $firstdirectorycontents = @(Get-ChildItem $firstdirectory -Recurse) $seconddirectorycontents = @(Get-ChildItem $seconddirectory -Recurse ) }

    else { $firstdirectorycontents = @(Get-ChildItem $firstdirectory) $seconddirectorycontents = @(Get-ChildItem $seconddirectory) }
    #compare the objects and handle errors 
if ($firstdirectorycontents.Count -eq 0 )
        {
        Write-Host "No files were found in the first directory, the directories cannot be compared."
        }
        elseif ($seconddirectorycontents.Count -eq 0)
        {
        Write-Host "No files were found in the second directory, the directories cannot be compared."
        }
        else
        {   
        try 
            {
            Compare-Object -ReferenceObject $firstdirectorycontents -DifferenceObject $seconddirectorycontents 
            }

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