ฉันจะเปรียบเทียบสองไดเรกทอรีกับ dirs ย่อยเพื่อดูความแตกต่างได้อย่างไร
ฉันจะเปรียบเทียบสองไดเรกทอรีกับ dirs ย่อยเพื่อดูความแตกต่างได้อย่างไร
คำตอบ:
ภายใต้ Linux:
$ diff -r /first/directory /second/directory
ใน Windows: คุณน่าจะดาวน์โหลดและติดตั้ง WinMerge ได้ดีกว่า
> WinMerge /r c:\first\folder c:\second\folder
M
ฉันใช้meldกับ Ubuntu - มีตัวเลือกการเปรียบเทียบไดเรกทอรีที่ดี
Beyond Compare เป็นเครื่องมือเชิงพาณิชย์ที่ดีราคา $ 30 หรือมากกว่านั้น ทำงานภายใต้ windows มีรุ่น eval http://www.scootersoftware.com/
สำหรับ Windows ฉันเชื่อว่า Windiff ใช้งานได้ แต่Winmergeเป็นเครื่องมือที่ฉันเลือกใช้สำหรับงานนี้ มันเป็นโอเพ่นซอร์สและทำงานอย่างเรียบร้อยมากเมื่อเปรียบเทียบไดเร็คทอรี่ต้นไม้สองชุด
แก้ไข: โอ๊ะโอถูกโจมตีโดย Marius
ปกติจะใช้ 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
DiffMerge สำหรับ Windows แสดงความแตกต่างรวมถึงโฟลเดอร์ย่อยในหน้าต่าง นอกจากนี้ยังมีรุ่นพกพาบางแห่ง แต่การค้นหาอย่างรวดเร็วเปิดเผยดาวน์โหลดนี้: http://www.softpedia.com/get/System/File-Management/SourceGear-DiffMerge.shtml
ฉันเขียนสิ่งนี้โดยใช้การเปรียบเทียบวัตถุ 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."} }