📌  相关文章
📜  如何在 linux 中比较两个目录 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:08:42.263000             🧑  作者: Mango

如何在 Linux 中比较两个目录 - Shell/Bash

在 Linux 系统中,要比较两个不同的目录,可以使用一些工具来进行比较。其中,最常用的工具是 diff 和 rsync 命令。本文将介绍如何使用这两个命令来比较两个目录,以及如何选择适合的工具来满足你的需求。

1. diff 命令

diff 命令是一个比较两个文件或目录差异的命令。在比较两个目录时,diff 命令会逐个比较两个目录中的每个文件,并列出它们之间的差异和相似之处。

下面是一个比较两个目录的示例:

diff -r dir1 dir2
  • -r 参数表示递归比较目录和子目录,并输出差异信息。

输出结果如下:

Only in dir1: file1
Only in dir2: file2
diff dir1/file3 dir2/file3
1c1
< This is file3 in dir1
---
> This is file3 in dir2

说明:

  • Only in dir1: file1 表示只在 dir1 中存在的文件 file1
  • Only in dir2: file2 表示只在 dir2 中存在的文件 file2
  • diff dir1/file3 dir2/file3 表示 dir1dir2 中的 file3 文件存在差异。
  • 1c1 表示出现差异的行号。
  • < This is file3 in dir1 表示 dir1 中的 file3 文件中的一行。
  • > This is file3 in dir2 表示 dir2 中的 file3 文件中的一行。

此外,diff 命令还有一些参数,可以进行更精细的比较,例如:

  • -u 参数:将输出结果进行格式化,便于查看和修改。
  • -q 参数:只输出差异信息的文件名,而不显示具体差异信息。
2. rsync 命令

rsync 命令也是一个用于文件同步和备份的命令,但它与 diff 命令不同的是,rsync 命令只同步两个目录之间的差异,可以忽略完全一样的文件,而且支持增量同步。

使用 rsync 命令比较两个目录的示例:

rsync -avc --dry-run dir1/ dir2/
  • -a 参数:表示以归档模式同步目录,包括权限、时间戳和子目录等信息。
  • -v 参数:表示输出详情。
  • -c 参数:表示根据文件校验和比较文件内容。
  • --dry-run 参数:表示演示模式,只输出同步结果,不进行同步操作。

输出结果如下:

sent 201 bytes  received 34 bytes  470.00 bytes/sec
total size is 6  speedup is 0.03 (DRY RUN)

rsync: link_stat "/mnt/c/Users/xxx/Desktop/dir1/file4" failed: No such file or directory (2)
dir1/
file1
file2
file3
file5

说明:

  • sent 201 bytes received 34 bytes 470.00 bytes/sec 表示传输的字节数及速度。
  • total size is 6 speedup is 0.03 (DRY RUN) 表示文件总大小和同步速度。
  • rsync: link_stat "/mnt/c/Users/xxx/Desktop/dir1/file4" failed: No such file or directory (2) 表示 dir1 中的 file4 文件在 dir2 中不存在。
  • dir1/ 表示 dir1 目录。
  • file1file2file3file5 表示需要同步的文件。

此外,rsync 命令还有一些参数,如:

  • -u 参数:仅同步目标目录不存在的文件,不同步文件内容已变更但修改时间未变的文件。
  • -z 参数:在数据传输时使用压缩算法,减少传输数据量。
  • -p 参数:保留文件权限。
  • -r 参数:递归同步目录及其子目录。

总结

在 Linux 系统中,比较两个目录可以使用 diff 命令和 rsync 命令。diff 命令适合精细比较,rsync 命令适合文件同步和备份。但无论是使用 diff 还是 rsync 命令,都需要记住在命令行中输入正确的参数,以便正确比较两个目录的差异。