Làm thế nào để so sánh hai thư mục (bao gồm cả thư mục phụ) cho sự khác biệt?


14

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?


6
Hệ điều hành xin vui lòng.
Maximus Minimus

Bạn có muốn biết nếu có các tệp khác nhau giữa hai thư mục hoặc nếu nội dung của các tệp là khác nhau?
Matt Simmons

Câu trả lời:


20

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


3
Tôi sử dụng diff -qrl ngay bây giờ ...
alexus

1
Có một tùy chọn trong GUI để chỉ định công tắc / r mà không sử dụng dấu nhắc lệnh không?
Omtara

@Omtara, sau khi bạn đã bắt đầu WinMerge, chọn Tệp - Mở. Trong hộp thoại mở, kiểm tra // Bao gồm các thư mục con //. Nếu bạn mở WinMerge bằng cách chọn hai thư mục trong Windows Explorer, hãy định cấu hình tích hợp Shell. Mở Chỉnh sửa - Tùy chọn; điều hướng đến Danh mục // Tích hợp Shell và kiểm tra // Bao gồm các thư mục con theo mặc định //.
R. Schreurs

2

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.


+1 cho meld, thông thường tôi thích các tùy chọn dòng lệnh như diff nhưng có thể thấy trực quan các thư mục khác nhau thực tế của hai thư mục khác nhau trong nháy mắt theo cách trực quan như vậy là rất hữu ích. Cả meld và diff vẫn hoạt động tốt trên Ubuntu 16.04 và Ubuntu 18.04 cho bất kỳ ai khác tìm thấy điều này vào năm 2018. Tất nhiên trên Windows, WinMerge là một lựa chọn tuyệt vời. Tôi đã nghe Meld hoạt động trên Windows nhưng cá nhân tôi chưa thử.
Ken

1

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/


1

Trên Windows, tôi tin rằng Windiff làm điều đó, tuy nhiên Winmerge là công cụ tôi chọn cho công việc này. Đó là nguồn mở và thực hiện một công việc rất gọn gàng khi so sánh hai bộ cây thư mục.

chỉnh sửa: Rất tiếc, đã bị Marius đánh bại


1

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 diffanh 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 Rsyncfind. 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.



0

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."} }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.