web-dev-qa-db-ja.com

2つのディレクトリ(サブディレクトリを含む)の違いを比較する方法は?

2つのディレクトリをサブディレクトリと比較して、違いがどこにあるかを確認するにはどうすればよいですか?

14
alexus

Linuxの場合:

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

Windowsの場合:WinMergeをダウンロードしてインストールする方が良いでしょう。

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

M

20
MariusPontmercy

私は meld をUbuntuで使用しました-優れたディレクトリ比較オプションがあります。

2
DNayak

Beyond Compareは、30ドル程度の優れた商用ツールです。 Windowsで動作し、評価版があります。 http://www.scootersoftware.com/

1
Johnny D

Windowsでは、windiffがそれを行うと思いますが、 Winmerge は、この仕事に最適なツールです。これはオープンソースであり、2組のディレクトリツリーを比較するという非常に優れた機能を果たします。

編集:おっと、マリウスに殴られた

1
Bryan

通常、diffは2つのファイルを比較するために使用されますが、それ以上のことができます。 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の両方で正常に動作します。

1
Fábio

これは、PowershellのCompare-Objectsコマンドレットを使用して記述しました。

#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."} }
0
Davidw

DiffMerge for Windowsは、サブフォルダーを含む違いをウィンドウに表示します。どこかにポータブルバージョンもありますが、クイック検索でこのダウンロードが明らかになりました: http://www.softpedia.com/get/System/File-Management/SourceGear-DiffMerge.shtml

0
GHad