Bagaimana membandingkan dua direktori (termasuk sub direktori) untuk perbedaan?


14

Bagaimana saya bisa membandingkan dua direktori dengan sub direktori untuk melihat perbedaannya?


6
Sistem Operasi tolong.
Maximus Minimus

Apakah Anda ingin tahu apakah ada file yang berbeda antara dua direktori atau apakah isi file berbeda?
Matt Simmons

Jawaban:


20

Di bawah Linux:

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

Di bawah Windows: Anda mungkin sebaiknya mengunduh dan menginstal WinMerge, kemudian

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

M.


3
Saya menggunakan diff -qrl sekarang ...
alexus

1
Apakah ada opsi di GUI untuk menentukan / r switch tanpa menggunakan command prompt?
Omtara

@ Omtara, setelah Anda memulai WinMerge, pilih File - Open. Dalam dialog terbuka, centang // Sertakan Subfolder //. Jika Anda membuka WinMerge dengan memilih dua folder di Windows Explorer, konfigurasikan integrasi Shell. Buka Edit - Opsi; arahkan ke Category // Shell Integration dan centang // Sertakan subfolder secara default //.
R. Schreurs

2

Saya menggunakan berbaur di Ubuntu - ini memiliki opsi perbandingan direktori yang baik.


+1 untuk berbaur, biasanya saya suka opsi baris perintah seperti diff tetapi bisa melihat secara visual folder yang berbeda dari dua direktori yang berbeda dalam sekejap sedemikian rupa visual sangat berguna. Kedua berbaur dan diff masih berfungsi dengan baik di Ubuntu 16.04 dan Ubuntu 18.04 untuk orang lain yang menemukan ini di 2018. Tentu saja pada Windows, WinMerge adalah pilihan yang bagus. Saya telah mendengar karya Meld pada Windows tetapi saya belum mencobanya secara pribadi.
Ken


1

Di Windows, saya percaya windiff melakukannya, namun Winmerge adalah alat pilihan saya untuk pekerjaan ini. Ini open source dan melakukan pekerjaan yang sangat rapi untuk membandingkan dua set pohon direktori.

sunting: oops, dipukuli oleh Marius


1

Diff biasanya digunakan untuk membandingkan dua file, tetapi dapat melakukan lebih dari itu. Dalam diffopsi dia "r" dan "q" membuatnya bekerja secara rekursif dan diam-diam, yaitu, hanya menyebutkan perbedaan, yang hanya apa yang kita cari:

diff -rq todo_orig/ todo_backup/

Jika Anda juga ingin melihat perbedaan untuk file yang mungkin tidak ada di direktori mana pun:

diff -Nrq dir1/ dir2/

Anda juga dapat menggunakan Rsyncdan find. Untuk find:

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

Tetapi file dengan nama dan subfolder yang sama, tetapi dengan konten yang berbeda, tidak akan ditampilkan dalam daftar.

Jika Anda adalah penggemar GUI, Anda dapat memeriksa Meld . Ini berfungsi baik di windows dan linux.



0

Saya menulis ini menggunakan cmdlet Compare-Objects di 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."} }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.