每个文件预处理的递归diff


3

我如何获得的综合效应diff -r left_dir right_dir,并diff <(cat left_file | myfilter) <(cat right_file | myfilter)没有太多的脚本?

Answers:


2

如果您的文件名很简单(没有空白等),您可以使用

left_dir=...
right_dir=...
find $left_dir -type f | while read left ; do
    relpath=${left#$left_dir}
    diff <(myfilter $left) <(myfilter $right_dir$relpath)
done

如果这已经“很多脚本”并且仍然存在问题(文件名中有空格,一边是不存在的文件等),那么你可能运气不好。


如果你正确引用变量,应该很容易使用空格,并且find … -print0 | while IFS= read -r -d '' …
slhck 2013年

@slhck:当然。我把它当作“太多脚本”;-)
choroba

这实现了单级递归。要做到正确,你需要做find left -type dfind right_dir -type d转储左右差异并将你的代码应用到交集。
bobah 2013年

@bobah:你是什么意思?如果$left_dir/path/deeper/than/one存在,relpath将是path/deeper/than/one和diff将比较文件$right_dir/path/deeper/than/one
choroba 2013年

@choroba:你是对的,我的评论有误导性。上面的代码不会报告在右边但在左边缺少的空目录和文件(虽然修改使其工作相当简单)
bobah 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.