AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 39534
Accepted
Adam Matan
Adam Matan
Asked: 2009-07-13 02:55:46 +0800 CST2009-07-13 02:55:46 +0800 CST 2009-07-13 02:55:46 +0800 CST

比较(diff)完整目录结构的最佳方法?

  • 772

比较目录结构的最佳方法是什么?

我有一个使用rsync的备份实用程序。我想说明源和备份之间的确切差异(在文件大小和最后更改日期方面)。

就像是:

Local file                   Remote file                         Compare
/home/udi/1.txt (date)(size)   /home/udi/1.txt (date)(size)     EQUAL
/home/udi/2.txt (date)(size)   /home/udi/2.txt (date)(size)     DIFFERENT

当然,该工具可以是现成的,也可以是 python 脚本的想法。

非常感谢!

乌迪

filesystems files rsync
  • 9 9 个回答
  • 46179 Views

9 个回答

  • Voted
  1. Best Answer
    brianegge
    2009-07-13T03:22:12+08:002009-07-13T03:22:12+08:00

    您正在寻找的工具是rdiff。它的工作方式类似于结合 rsync 和 diff。它会创建一个补丁文件,您可以比较或分发该补丁文件。

    • 19
  2. Camilo Martin
    2012-06-19T16:11:41+08:002012-06-19T16:11:41+08:00

    有些人出于不同的原因想要比较文件系统,所以我将在这里写下我想要什么以及我是如何做到的。

    我想了:

    • 将同一文件系统与其自身进行比较,即,快照、进行更改、快照、比较。
    • 添加或删除哪些文件的列表,不关心内部文件更改。

    我做了什么:

    第一个快照(before.sh脚本):

    find / -xdev | sort > fs-before.txt
    

    第二个快照(after.sh脚本):

    find / -xdev | sort > fs-after.txt
    

    比较它们(diff.sh脚本):

    diff -daU 0 fs-before.txt fs-after.txt | grep -vE '^(@@|\+\+\+|---)'
    

    好的部分是这使用了几乎默认的系统二进制文件。可以通过传递find一个-exec回显文件路径的参数和之后的 MD5 来根据内容进行比较。

    • 13
  3. chris
    2009-07-13T05:17:03+08:002009-07-13T05:17:03+08:00

    如果您不想安装其他工具...

    for host in host1 host2
    do
      ssh $host ' 
      cd /dir &&
      find . |
      while
        read line
      do
        ls -l "$line"
      done ' | sort  > /tmp/temp.$host.$$
    done
    diff /tmp/temp.*.$$ | less
    echo "don't forget to clean up the temp files!"
    

    是的,它可以使用 find 和 exec 或 find 和 xargs 来完成,就像在 for 循环中找到一样容易。而且,您还可以完善 diff 的输出,使其显示“此文件在 host1 上但不在 host2 上”之类的内容,但此时您最好安装其他人都在谈论的工具......

    • 9
  4. chmeee
    2009-07-13T04:00:47+08:002009-07-13T04:00:47+08:00

    我过去使用dirdiff来比较目录结构。它仅适用于本地目录,因此您必须sshfs-mount 您的其他目录。

    好消息是您可以直观地看到文件是否相等以及哪个文件更新或旧。它最多支持5个目录。您还可以查看差异并将文件从一个复制到另一个。

    • 5
  5. AlexB
    2014-07-23T08:33:52+08:002014-07-23T08:33:52+08:00

    diff -r实际上效果很好。如果您只想知道文件是否不同,而不是差异的实际内容,请执行diff -qr

    • 5
  6. Saurabh Barjatiya
    2009-07-13T03:04:54+08:002009-07-13T03:04:54+08:00

    从 rsync 手册页:

    -n, --dry-run
    This  makes rsync perform a trial run that doesn’t make any changes (and produces mostly
    the same output as a real run).  It is most commonly used in combination  with  the  -v,
    --verbose  and/or -i, --itemize-changes options to see what an rsync command is going to
    do before one actually runs it.
    

    可能这会有所帮助。

    • 4
  7. Pablo
    2009-07-13T05:18:47+08:002009-07-13T05:18:47+08:00

    我会为此使用 Meld。

    • 3
  8. helvete
    2019-07-24T04:50:05+08:002019-07-24T04:50:05+08:00

    我真的不想安装任何新东西,所以我的解决方案有点粗糙,但快速有效。

    我想比较所有文件已被复制,并且它们的文件模式、所有权和 SELinux 安全上下文保持不变。

    所以我跑了:

    rsync -aX /orig /copy/
    

    然后像这样比较:

    cd /orig && ls -lZR > /tmp/diff_orig
    cd /copy && ls -lZR > /tmp/diff_copy
    vimdiff /tmp/diff_*
    

    如果两个文件的内容保持折叠状态,则它们是相同的。如果没有,则显示差异。

    更新参数ls以反映您需要检查的属性。YMMV

    • 3
  9. Freedom Fighter
    2010-04-08T22:53:50+08:002010-04-08T22:53:50+08:00

    除了 Windows 上已经提到的工具之外,您还可以使用 Total Commander 或 WinSCP,它们都具有非常舒适的功能来比较(和同步)目录。

    • 2

相关问题

  • 我如何知道 AIX 中磁盘上的文件系统是什么?

  • 控制 UNIX 目录内容用户组所有权

  • 在 Ubuntu 上将 Windows 磁盘分区与 Linux 分区合并

  • 在 VMPlayer 上 Windows 和 Linux 之间共享目录的最佳方式

  • md5sum 重复为同一台机器上的同一文件提供不同的校验和

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve