Làm thế nào tôi có thể so sánh hai thư mục với thư mục con để xem sự khác biệt ở đâu?
Làm thế nào tôi có thể so sánh hai thư mục với thư mục con để xem sự khác biệt ở đâu?
Câu trả lời:
Trong Linux:
$ diff -r /first/directory /second/directory
Trong Windows: bạn có thể tải xuống và cài đặt WinMerge tốt hơn, sau đó
> WinMerge /r c:\first\folder c:\second\folder
M
Tôi đã sử dụng meld trên Ubuntu - nó có một tùy chọn so sánh thư mục tốt.
Beyond So sánh là một công cụ thương mại tốt, $ 30 hoặc hơn. Chạy dưới cửa sổ, có một phiên bản eval. http://www.scootersoftware.com/
Diff thường được sử dụng để so sánh hai tập tin, nhưng có thể làm nhiều hơn thế. Trong diff
anh ta, các tùy chọn "r" và "q" làm cho nó hoạt động đệ quy và lặng lẽ, nghĩa là chỉ đề cập đến sự khác biệt, đó chính là thứ chúng tôi đang tìm kiếm:
diff -rq todo_orig/ todo_backup/
Nếu bạn cũng muốn thấy sự khác biệt cho các tệp có thể không tồn tại trong một trong hai thư mục:
diff -Nrq dir1/ dir2/
Bạn cũng có thể sử dụng Rsync
và find
. Dành cho find
:
find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER
Nhưng các tệp có cùng tên và trong cùng một thư mục con, nhưng có nội dung khác nhau, sẽ không được hiển thị trong danh sách.
Nếu bạn là người hâm mộ GUI, bạn có thể kiểm tra Meld . Nó hoạt động tốt trong cả windows và linux.
DiffMerge cho Windows cho thấy sự khác biệt bao gồm các thư mục con trong một cửa sổ. Ngoài ra còn có một phiên bản di động ở đâu đó nhưng một tìm kiếm nhanh đã tiết lộ bản tải xuống này: http://www.softpedia.com/get/System/File-Manloyment/SourceGear-DiffMerge.shtml
Tôi đã viết điều này bằng cách sử dụng lệnh ghép ngắn So sánh đối tượng trong 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."} }