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


14

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


6
オペレーティングシステムをお願いします。
マキシマスミニマス

2つのディレクトリ間で異なるファイルがあるかどうか、またはファイルの内容が異なるかどうかを知りたいですか?
マットシモンズ

回答:


20

Linuxの場合:

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

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

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

M


3
私は...今-qrl diffを使う
alexus

1
コマンドプロンプトを使用せずに/ rスイッチを指定するオプションがGUIにありますか?
オムタラ

@ Omtara、WinMergeの起動後、[ファイル]-[開く]を選択します。開いているダイアログで、// Include Subfolders //をチェックします。Windowsエクスプローラーで2つのフォルダーを選択してWinMergeを開く場合、シェル統合を構成します。編集-オプションを開きます。カテゴリ// Shell Integrationに移動し、//デフォルトでサブフォルダを含める//をチェックします。
R. Schreurs

2

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


meldの+1は、通常diffのようなコマンドラインオプションが好きですが、2つの異なるディレクトリの実際の異なるフォルダを視覚的に一目で視覚的に見ることができるのは非常に便利です。meldとdiffはどちらも、Ubuntu 16.04とUbuntu 18.04で2018年にこれを見つけた人なら誰でも正常に動作します。もちろんWindowsでは、WinMergeは素晴らしいオプションです。MeldがWindowsで動作すると聞いたことがありますが、個人的にはまだ試していません。
ケン

1

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


1

Windowsでは、windiffがそれを行うと信じていますが、Winmergeはこの仕事に最適なツールです。これはオープンソースであり、2セットのディレクトリツリーを比較する非常にきちんとした仕事をします。

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


1

Diffは通常2つのファイルを比較するために使用されますが、それ以上のことができます。でdiffある彼のオプション「R」と「Q」それは再帰的かつ静かに動作させる、唯一の言及違い、これは我々が探しているものばかりです。

diff -rq todo_orig/ todo_backup/

どちらのディレクトリにも存在しない可能性のあるファイルの違いも確認したい場合:

diff -Nrq dir1/ dir2/

およびを使用することできます。のために:Rsyncfindfind

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

ただし、同じ名前で同じサブフォルダーにあるが、内容が異なるファイルはリストに表示されません。

GUIのファンなら、Meldをチェックしてください。WindowsとLinuxの両方で正常に動作します。



0

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."} }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.