如何比较两个目录(包括子目录)之间的差异?


Answers:


20

在Linux下:

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

在Windows下:最好下载并安装WinMerge,然后

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

中号


3
我现在使用diff -qrl ...
Alexus 2011年

1
GUI中是否有一个选项可以指定/ r开关而不使用命令提示符?
Omtara

@Omtara,启动WinMerge后,选择“文件”“打开”。在打开的对话框中,选中//// Include Subfolders //。如果通过在Windows资源管理器中选择两个文件夹来打开WinMerge,请配置Shell集成。打开编辑-选项;导航到类别// Shell集成,并检查//默认情况下包含子文件夹//。
R. Schreurs 2014年

2

我在Ubuntu上使用了meld-它具有很好的目录比较选项。


对于+1来说,通常我喜欢diff之类的命令行选项,但是能够以这种直观的方式一目了然地看到两个不同目录的实际不同文件夹非常有用。对于在2018年发现此问题的任何人,meld和diff在Ubuntu 16.04和Ubuntu 18.04上仍然可以正常工作。当然,在Windows上,WinMerge是一个不错的选择。我听说Meld在Windows上可以工作,但是我还没有亲自尝试过。
肯(Ken)


1

在Windows上,我相信windiff可以做到,但是Winmerge是我选择此工作的工具。它是开源的,在比较两组目录树方面做得非常好。

编辑:哎呀,被马吕斯殴打了


1

Diff通常用于比较两个文件,但可以做的更多。在diff选项中,“ r”和“ q”使其递归且安静地工作,也就是说,仅提及差异,这正是我们要寻找的:

diff -rq todo_orig/ todo_backup/

如果您还想查看两个目录中可能不存在的文件的差异,请执行以下操作:

diff -Nrq dir1/ dir2/

您也可以使用Rsyncfind。对于find

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

但是具有相同名称和相同子文件夹但具有不同内容的文件将不会显示在列表中。

如果您是GUI的粉丝,则可以查看Meld。它在Windows和Linux中都可以正常工作。



0

我是在Powershell中使用Compare-Objects cmdlet编写的:

#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."} }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.