文件和目录比较工具?


149

我正在寻找可以比较目录和文件的内容,例如Beyond Compare在Windows中所做的。

它主要用于源代码控制,但我也需要将其用于部署。


您只需要文件列表还是每个文件的实际内容?
马丁·乌丁2011年

我想要文件列表,并在可能的情况下使用相同路径的文件之间提供不同的内容。
isoman 2011年

2
如果GUI工具允许隐藏相同的文件夹和文件,将非常方便。这将使集中精力放在奇数文件夹和文件上变得容易得多。有谁知道支持此功能的工具?
JJD

看看统一。“超越比较”采用“一站式服务”,而“一致”则专注于处理树遍历,保持状态并传播更改,并通过将diff,三向合并等内容委派给您,从而覆盖“ 超越比较”功能。在文件级别工作的收藏程序。Unison是免费的,非常强大且成熟的软件,可以通过不同操作系统之间的网络等快速检测和同步大树。首先阅读文档,尤其是在Windows上。
斯特凡纳·古里科

emacs有一个目录比较工具。像所有emacs一样,好吃的东西是“好吃的东西甚至意味着什么?”,但是它显示了按键的上下文帮助,允许通过几次击键进行递归分析,隐藏相同的文件甚至子目录,以交互方式选择文件以显示颜色编码的差异,带有各种选项,可以交互式地合并,传播或对文件进行任意编辑,并使用所有常用的编辑功能轻松地转到下一个文件或目录,跟踪状态。
斯特凡纳·古里科

Answers:


175

融化安装融合

Meld是可以比较和合并文件和目录的工具。它是GUI的标准diff 安装diffutilspatch 安装补丁命令行工具。(有关更多信息,请参见man diffman补丁

在此处输入图片说明

另外,许多源代码控制系统(例如bzr 安装bzr-gtkgit 安装git)都可以在版本之间创建差异。


2
熔是惊人的。我将其用作源代码控制差异。
马特·乔纳

12
刚刚尝试在一个较大的文件夹中-4 GB,2000个文件。融合的功能是所需的。但是对于此文件夹,融合非常慢,并且UI无响应(阻止)。现在使用rsync。
geekQ

1
在并排比较文本文件甚至复制粘贴内容时也非常有用。我见过的最好的界面!
Stefan Rogin

@geekQ是一种快速的替代方法,能够立即处理您想要的最大文件夹,请参见beyond compare下文。优于
熔铸

每当我想选择一个文件夹时Meld都会崩溃:/我的发行版本存储库中有最新版本(Ubuntu 14.04)
Youda008

44

迪夫是你的朋友。

diff -ur path1 path2

这将比较path1和path2之间共有的所有文件。

如果您更改-ur为,-urN那么这还将显示仅在其中一个路径中存在的文件的内容。


1
已安装colordiff和使用colordiff -ur path1 path2
warvariuc

在cygwin中不起作用。
托马什Zato


13

使用diff命令:

diff -u file1 file2

diff -u选择具有几行上下文的格式。平原diff file1 file2仅列出不同的行。还有许多其他选项可控制输出格式,忽略仅空白的差异等。

如果要将输出写入文件,请重定向它:

diff -u file1 file2 >file1-file2.diff

12

侏儒指挥官安装Gnome Commander

界面可能并不真正性感,但功能非常强大!

替代文字

而且,如果您习惯了其他* Commander(例如Norton等),也不会迷路。


1
我没有用它来比较2个文件,但是我用它来告诉我与目录比较时哪些文件不同。这在整理照片时特别有用;-)
惠更斯(Huygens)2010年

10

命令行工具

受此博客条目的启发。

差异

列出不同的文件:

diff -qr folder1 folder2

清单还内容:

diff -Naur folder1 folder2

同步

如果两个目录不在同一台计算机上,则rsync可能是最简单的解决方案。通常rsync用于同步目录,但是您可以在冗长和干燥模式下运行它,因此它将仅列出需要更改的文件。

rsync -rvnc --delete folder1 server:/path/to/folder2

c如果要基于时间戳和文件大小比较文件以加速所有操作,则可以省略:

rsync -rvn --delete folder1 server:/path/to/folder2

9

克鲁萨德安装krusader

Krusader是一个免费工具(可从Software Center中获得),它可以比较显示文件夹内容,并且您可以与许多其他选项进行同步。您可以在同步和比较时进行过滤。

克鲁萨德

要比较文件内容,您只需标记两个文件,然后选择“文件”>“比较内容”,然后逐个字母地对它们进行比较。krusader使用的默认比较工具是默认的KDE工具“ Kompare ”。您可以将krusader设置为使用任何其他比较工具-例如上面的一种。

这是我找到的最完整的解决方案,非常方便。它支持午夜指挥官使用的所有功能keybindungs(诺顿指挥官语法)。


您还可以使用“工具->同步目录”来获取两个目录面板的递归文件更改视图。
Angelos Pikoulas 2014年

不幸的是,krusader中的同步器无法维护:bugs.kde.org/show_bug.cgi?id=270150#c7。是否有积极维护的替代方案?
rubo77

1
@ rubo77:此错误已得到修复。
mivk

9

KDiff3 安装kdiff3

它是KDE用户进行差异化的图形前端(或者如果您不介意使用Qt应用程序)。

kdiff3

目录也有dirdiff 安装dirdiff



4

Unison是一种快速的文件同步工具,它使用rsync算法,可让您在更新两个位置(无论是远程位置还是本地位置)之前预览差异。


4

我两周前了解了hashdeep。它具有一些强大的优势:

  • 与相比meld,它适用于非常大的文件夹。在meld变得极其缓慢且用户界面无响应(阻塞)的地方,哈希深度只能以恒定的速度工作
  • 与相比rsync,hashdeep会检测到移动的文件-内容相同但位于不同目录中的文件。

详细输出如下:

...
foo/bar.txt: Known file not used
x/foo/M0824_2L.JPG: Moved from y/P1010998.JPG

hashdeep: Audit failed
   Input files examined: 0
  Known files expecting: 0
          Files matched: 6233
Files partially matched: 0
            Files moved: 3695
        New files found: 19257
  Known files not found: 4713

4

进行此比较的一个好方法是使用“ find ”和“ md5sum ”,然后使用“ diff ”。

例:

使用find列出目录中的所有文件,然后为每个文件计算md5哈希并将其通过管道传输到文件:

$find /dir1/ -type f -exec md5sum {} \; > dir1.txt

对另一个目录执行相同的过程:

$find /dir2/ -type f -exec md5sum {} \; > dir2.txt

然后将结果两个文件与“ diff”进行比较:

$diff dir1.txt dir2.txt

当要比较的两个目录不在同一台计算机上并且您需要确保两个目录中的文件相等时,此策略非常有用。

完成这项工作的另一个好方法是使用git

git diff --no-index dir1/ dir2/

最好的祝福!


3

也尝试FreeFileSync。它具有良好的界面,可接受的比较速度,对比较结果的良好过滤,不同的同步方式。它带有一个文件夹监视工具(RealTimeSync),当特定的一个或多个文件夹或其中的文件发生更改时,该工具可以启动FreeFileSync(实际上是任何命令或脚本)。真的值得一试。

关于它的更多信息在这里在这里,在这里你有PPA,太

在他们的页面上,主要功能:

比较文件(按字节或按日期)并进行同步。

无限制:可以同步任意数量的文件。

Unicode支持。

网络支持。

内置支持非常长的文件名(超过MAX_PATH = 260个字符)。

同步数据库,用于传播已删除的文件和检测冲突

支持具有不同配置的多个文件夹对

完全支持Windows / Linux符号链接和Windows连接点。

精简且易于访问的UI:针对速度和大量数据进行了高度优化。

完全用C ++编码的算法。

所有进度指示器均经过优化,以实现最佳性能!

创建批处理作业以使用或不使用GUI进行自动同步。

专注于可用性:

UI上仅必要的功能:没有重载的菜单或图标丛林。

通过拖放选择所有文件夹。

上次使用的配置和屏幕设置将自动保存。

通过拖放,加载按钮或命令行维护和加载不同的配置。

双击以启动外部应用程序(例如Windows资源管理器中的显示文件)

复制并粘贴所有网格数据为文本

直接在主网格上删除多余的/临时的文件。

右键单击上下文菜单。

全面的状态信息和错误报告

按名称,大小或日期对文件列表进行排序。

对文件大小的支持大于4 GB。

选择将文件移动到回收站,而不是删除/覆盖它们。

使用默认过滤器忽略目录“ \ RECYCLER”和“ \ System Volume Information”。(仅Windows)

本地化版本适用于多种语言。

复制前删除:避免大型同步作业的光盘空间不足。

筛选功能以包括/排除文件同步(无需重新比较!)。

临时从同步中包括/排除特定文件。

自动处理FAT / FAT32卷上的夏令时更改。

提供便携式版本(可通过安装程序选择)。

本机64位版本。

从FreeFileSync自动检查更新。

使用Windows卷影复制服务复制锁定的文件。(仅Windows)

使用目录名称中的宏%time%,%date%创建常规备份

同步时复制文件和文件夹的创建/访问/修改时间

先进的锁定策略可允许多个同步过程(例如,多个编写者,相同的网络共享)

我要添加它可以管理已删除的文件,将它们移到“废纸rash”或用户指定的文件夹中。指出一个缺点:程序文档将重点放在Windows上,而不是Linux。但它做得很好。


3

您可以使用diffuse:

sudo apt-get install diffuse
diffuse file1 file2

2
我经常使用Diffuse的一项杀手级功能-手动设置合并锚点的功能。它还没有做目录(但是),但是对于单个和混乱的差异,anchors功能很棒。
Sk606 2013年


1

如果您只是进行比较,则Eclipse IDE会显得有些笨重,但是它确实做得很好。您可以选择2个项目,路径或文件,并将它们相互比较,还可以与源代码控制服务器同步。


1

恕我直言,FreeFileSync非常好,比Meld更有用。它快速且稳定,可以进行可定制的同步,还可以将比较结果导出到csv文件中。

Lanchpad链接



0

比较文件

File_1.txt
Line1
Line2

File_2.txt
Line1
Line 2

您可以使用以下命令cmp

cmp -b "File_1.txt" "File_2.txt"

输出将是

a b differ: byte 11, line 2 is  62 2  40  

比较目录(您的需求):

您可以使用diff命令:

diff -r --brief dir1 dir2

man diff

  -r, --recursive
              recursively compare any subdirectories found

   -q, --brief
          report only when files differ
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.