我想递归比较两个预期相同的目录树,但我不想进行长时间的完整比较。我想进行有效的比较,这样一旦检测到 1 个差异,命令就会停止并返回,并告诉我哪个文件不同。
我认为不同之处在于:
- 两个文件有不同的内容(不同的时间戳并不重要)
- 在一个目录中找到了一个文件,但在另一个目录中没有找到(当然,在完全相同的路径上)
笔记:
- 我不需要知道文件内的实际差异,只需文件路径就足够了
- 我在 Ubuntu 20.04 上尝试了 diff 3.7,它没有我能看到的“在差异时停止”选项
- 这些文件是文本和二进制的混合
答案1
我不知道有哪个程序可以做到这一点,但编写一个小脚本很容易,diff
只需在第一个差异处调用并停止即可。就像这样:
#!/bin/bash
dir1="$1"
dir2="$2"
if [[ "*$dir1*$dir2*" == *"**"* ]]; then
echo "Use: $0 dir1 dir2"
exit 6
fi
while read line; do
echo "The directory contents are different."
exit 1
done < <(diff -qr "$dir1" "$dir2")
echo "The directory contents are the same."
这会将 的输出通过管道传输diff
到 中read
,一旦收到任何内容,就会退出 shell,并终止diff
子进程。