Linux命令 --- 文件比较diff/cmp

  1. diff [options] 源文件 目标文件
    按行比较两个文件,并显示两者的区别。
    -i 忽略大小写
    -b 不检查空格字符的不同
    -B 不检查空白行
    -c 显示文件全文并对不同进行标注
    -w 忽略所有的空格
    -p 当比较的是c代码时显示所在的函数
    -q 仅显示有无差异
    -r 比较子目录的文件
    -T 在每行前面加tab以保持对齐
    -y 以并列的方式显示两个文件的不同(-W指定宽度)
    –left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。
    –suppress-common-lines  在使用-y参数时,仅显示不同之处。
    -u/U 以合并的方式来显示文件内容的不同
    -N 比较目录时,如果有文件不存在,则与空文件进行比较
    -H 试探法比较大文件
    【patch补丁等情况会用到】

  2. cmp
    逐个字节对文件进行比较,输出不同的字节(定位)。用来比较文件是否相同吧。
    -c 除了十进制编码,还输出字符本身
    -l 输出所有不同的字节

### Linux `cmp` 命令的功能与使用说明 #### 功能概述 `cmp` 是一个在 Unix 和 Linux 系统中用于比较两个文件内容的工具。它通过逐字节对比两个文件,找出第一个不同之处,并报告该差异的位置[^4]。如果两个文件完全相同,则不会有任何输出。 #### 语法格式 ```bash cmp [选项] 文件1 [文件2 [跳过1 [跳过2]]] ``` #### 常见选项及功能 以下是 `cmp` 命令的一些常见选项及其具体作用: 1. **无选项** 如果不指定任何选项,默认情况下 `cmp` 只会在发现第一个差异时停止,并输出差异的具体位置。 ```bash cmp file1.txt file2.txt ``` 若两文件存在差异,可能会返回如下信息: ``` file1.txt file2.txt differ: byte X, line Y ``` 2. **`-b`, `--print-bytes`** 此选项会输出不同的字节值,以八进制格式显示。 ```bash cmp -b file1.txt file2.txt ``` 示例输出: ``` 1 'A' 'B' ``` 3. **`-i`, `--ignore-initial=SKIP`** 跳过两个文件开头的部分字节后再进行比较。可以通过冒号分隔的方式分别设置两个文件要忽略的初始部分长度。 ```bash cmp -i 10:20 file1.txt file2.txt ``` 4. **`-l`, `--verbose`** 输出每个不同字节的编号及其对应的十六进制值。 ```bash cmp -l file1.txt file2.txt ``` 示例输出: ``` 20 12 56 21 124 12 ``` 5. **`-n`, `--bytes=LIMIT`** 设置最大比较字节数量,超过这个数量则不再继续比较。 ```bash cmp -n 100 file1.txt file2.txt ``` 6. **`-s`, `--quiet`, `--silent`** 静默模式下运行命令,即使有差异也不会输出任何消息,仅通过退出状态码判断结果。 ```bash cmp -s file1.txt file2.txt echo $? ``` 返回值为 `0` 表示文件相同;非零表示存在差异。 7. **`--help`** 显示帮助文档。 ```bash cmp --help ``` 8. **`--version`** 查看当前安装的 `cmp` 版本信息。 ```bash cmp --version ``` #### 实际应用案例 以下是一些实际场景中的例子: 1. **基本用法** 比较两个文本文件是否存在差异。 ```bash cmp file1.txt file2.txt ``` 2. **静默比较** 判断两个二进制文件是否相等而不输出具体内容。 ```bash cmp -s binary_file1.bin binary_file2.bin && echo "Files are identical" ``` 3. **大文件比较进度监控** 结合 `pv` 工具实时跟踪大型文件或磁盘分区间的比较过程。 ```bash pv large_file1 | cmp -l large_file2 > comparison_results.log ``` 4. **限定范围内的比较** 对特定区域的数据块执行一致性验证。 ```bash cmp -n 1024 disk_image.img backup_disk_image.img ``` #### 注意事项 当处理非常大的数据集或者需要频繁调优性能时,请注意合理配置资源消耗较高的操作参数组合[^3]。 --- ### 示例代码片段 下面提供一段简单的脚本来批量检查目录下的所有 `.txt` 文件对之间的一致性情况: ```bash #!/bin/bash for f1 in *.txt; do for f2 in *.txt; do if [[ "$f1" != "$f2" ]]; then diff_result=$(cmp -s "$f1" "$f2"; echo $?) if [[ "${diff_result}" -ne 0 ]]; then echo "Difference found between ${f1} and ${f2}" fi fi done done ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值