这个问题类似于如何仅比较两个文件的第一行?,但以递归方式进行。我想比较两个目录,但是:
- 仅比较两个目录中每个文件的前 N 行
- 比较两个目录中每个文件除前 N 行之外的所有内容
答案1
答案2
这两个循环用于diff -qr
进行初始比较,主要是为了轻松获取文件名,然后对找到的文件对进行单独的比较。sed
用于清除前 N 行,或仅保留前 N 行。首先清除 N 行:
N=2
diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do diff --label "$a" --label "$b" -u <(sed "1,${N}s/.*//" <"$a") <(sed "1,${N}s/.*//" <"$b")
done
保持 N 不变:
diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do diff --label "$a" --label "$b" -u <(sed -n "1,${N}p" <"$a") <(sed -n "1,${N}p" <"$b")
done
假设文件名中没有空格/制表符。