PHP核对两个xml的异同,linux 比较和判定两个文件异同

本文详细介绍了在Linux中用于比较文件的四个命令:diff、cmp、comm和md5sum。diff用于显示两个文件的差异,cmp检查文件是否相同,comm展示两个文件的共同和唯一行,而md5sum生成文件的校验和以验证文件的完整性。通过这些命令,用户可以在不同场景下有效地比较和验证文件内容的一致性。
摘要由CSDN通过智能技术生成

如何判断两个文件(file1 和 file2)是否相同?方法有多种,每种方法都有其自身的优点。

1.diff。最简单的命令是 diff,用于显示两个文件之间的差别。以下是这两个文件的内容:

# cat file1

In file1 only

In file1 and file2

# cat file2

In file1 and file2

In file2 only

使用 diff 命令能够了解这两个文件之间的差别,如下所示:

# diff file1 file2

1d0

< In file1 only

2a2

> In file2 only

#

在以上输出中,第一列中的“”表示该行位于第二个文件 (file2) 中。输出第一行中的字符 1d0 显示为了作用于文件 file1(以使其与 file2 相同)而在 sed 中必须执行的操作。

另一个选项 -y 显示了相同的输出,只不过输出是并排显示的:

# diff -y file1 file2 -W 120

In file1 only <

In file1 and file2 In file1 and file2

> In file2 only

-W 选项是可选的;它仅指示该命令使用宽度为 120 个字符的屏幕输出,这对于包含长行的文件很有用。

如果只希望了解文件是否不同,而不必知道如何不同,则可以使用 -q 选项。

# diff -q file3 file4

# diff -q file3 file2

Files file3 and file2 differ

由于文件 file3 和 file4 相同,因此没有输出;在另一个示例中,将报告文件存在差别。

如果要编写 shell 脚本,则采用以下方式生成可以分析的输出可能比较有用。-u 选项可以执行该操作:

# diff -u file1 file2

— file1 2006-08-04 08:29:37.000000000 -0400

+++ file2 2006-08-04 08:29:42.000000000 -0400

@@ -1,2 +1,2 @@

-In file1 only

In file1 and file2

+In file2 only

以上输出显示了这两个文件的内容,但并未显示重复内容,第一列中的 + 号和 – 号指示文件中的行。第一列中的任何字符均未指示这两个文件中同时存在的内容。

该命令可以识别空格。如果要忽略空格,请使用 -b 选项。使用 -B 选项忽略空白行。最后,使用 -i 忽略大小写。

diff 命令还可以应用于目录。命令

diff dir1 dir2

显示文件文件存在于任一目录中;无论文件是存在于这两个目录中的一个,还是同时存在于这两个目录中。如果它找到同名的子目录,则不会继续查看任何单个文件是否存在差别。示例如下:

# diff DBA102 PROPRD

Common subdirectories:DBA102/adump and PROPRD/adump

Only in DBA102:afiedt.buf

Only in PROPRD:archive

Only in PROPRD:BACKUP

Only in PROPRD:BACKUP1

Only in PROPRD:BACKUP2

Only in PROPRD:BACKUP3

Only in PROPRD:BACKUP4

Only in PROPRD:BACKUP5

Only in PROPRD:BACKUP6

Only in PROPRD:BACKUP7

Only in PROPRD:BACKUP8

Only in PROPRD:BACKUP9

Common subdirectories:DBA102/bdump and PROPRD/bdump

Common subdirectories:DBA102/cdump and PROPRD/cdump

Only in PROPRD:CreateDBCatalog.log

Only in PROPRD:CreateDBCatalog.sql

Only in PROPRD:CreateDBFiles.log

Only in PROPRD:CreateDBFiles.sql

Only in PROPRD:CreateDB.log

Only in PROPRD:CreateDB.sql

Only in DBA102:dpdump

Only in PROPRD:emRepository.sql

Only in PROPRD:init.ora

Only in PROPRD:JServer.sql

Only in PROPRD:日志

Only in DBA102:oradata

Only in DBA102:pfile

Only in PROPRD:postDBCreation.sql

Only in PROPRD:RMANTEST.sh

Only in PROPRD:RMANTEST.sql

Common subdirectories:DBA102/scripts and PROPRD/scripts

Only in PROPRD:sqlPlusHelp.log

Common subdirectories:DBA102/udump and PROPRD/udump

注意,普通的子目录只按这种方式报告,而不进行比较。如果要进一步深究,并比较这些子目录中的文件,则应使用以下命令:

diff -r dir1 dir2

该命令将采用递归方式进入每个子目录,以比较文件并报告同名文件之间的差别。

2.cmp.命令 cmp 类似于 diff:

# cmp file1 file2

file1 file2 differ:byte 10, line 1

只要遇到差别就会返回输出。可以使用此输出标识文件在何处可能存在差别。与 diff 一样,cmp 有很多选项,其中最重要的选项是 -s 选项,它只返回一个代码:

如果文件相同,则返回 0

如果文件不同,则返回 1

如果无法进行比较,则返回某个非零数字

示例如下:

# cmp -s file3 file4

# echo $?

0

特殊变量 $? 指示返回代码来自上次执行的命令。在本示例中,该变量为 0,表示文件 file1 和 file2 相同。

# cmp -s file1 file2

# echo $?

1

表示 file1 和 file2 不同。

cmp 的这个属性对于 shell 脚本非常有用,因为在 shell 脚本中您只希望检查两个文件是否存在差别,而不必检查差别是什么。该命令的另一个重要用途是比较二进制文件,而 diff 对于比较二进制文件可能并不可靠。

3.comm.命令 comm 与其他命令相似,只是输出分三列显示,并且列之间由制表符分隔。示例如下:

# comm file1 file2

In file1 and file2

In file1 only

In file1 and file2

In file2 only

如果您想要查看某个文件的内容(另一个文件中不存在这些内容),而不仅仅是差别(SQL 语言中 MINUS 实用程序的排序),则该命令将很有用。-1 选项将不显示在第一个文件中找到的内容:

# comm -1 file1 file2

In file1 and file2

In file2 only

4.md5sum.该命令将生成文件的 32 位 MD5 散列值:

# md5sum file1

ef929460b3731851259137194fe5ac47 file1

可以将两个具有相同校验和的文件视为相同。而该命令的用途并不仅仅限于比较文件。它还可以提供一种机制来确保文件的完整性。

假设您有两个需要保护的重要文件,file1 和 file2。可以使用 –check 选项检查并确保文件未更改。首先,为这些重要文件创建校验和文件,然后对其进行安全保存:

# md5sum file1 file2 > f1f2

以后,当您要验证这些文件是否仍保持不变时,可执行如下操作:

# md5sum –check f1f2

file1:OK

file2:OK

这清楚地表明文件未被修改。现在,更改一个文件并检查 MD5:

# cp file2 file1

# md5sum –check f1f2

file1:FAILED

file2:OK

md5sum:WARNING:1 of 2 computed checksums did NOT match

输出清楚地表明 file1 已被修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值