我有两个文件夹,我想要区分,除了我想忽略所有文件中的第一行。我试过了
diff -Nr <(tail -n +1 folder1/) <(tail -n +1 folder2/)
但这显然不是正确的方法。
答案 0 :(得分:2)
使用进程替换是创建中间输入文件描述符的正确方法。但是tail
对文件夹不起作用。只需遍历文件夹中的所有文件:
for f in folder1/*.txt; do
tail -n +2 $f | diff - <(tail -n +2 folder2/$(basename $f))
done
注意我使用的是+2
而不是+1
。 tail
行号从第1
行而不是0
答案 1 :(得分:2)
如果要忽略的第一行具有可由POSIX正则表达式匹配的独特格式,则可以使用diff
的{{1}}选项告诉它忽略这些行
如果不这样做,您想要采取的方法可能取决于您的确切要求。你说你“想要差异化”文件,但是如果它支持该功能,那么你的结果输出需要与--ignore-matching-lines=...
得到的结果完全匹配并不明显。 (例如,您是否需要差异中的行号来正确识别原始文件中的行号?)
最精确的忠实方法可能如下:
diff -Nr
将每个目录复制到新位置。cp --recursive ...
的内容编辑每个文件的第一行以添加像IGNORE_THIS_LINE::
这样的魔术字符串。find -type f -exec sed -i '1 s/^/IGNORE_THIS_LINE::/' '{}' ';'
比较结果。
diff -Nr --ignore-matching-lines=^IGNORE_THIS_LINE:: ...
,以过滤掉仍然显示的sed s/IGNORE_THIS_LINE:://
出现的任何事件(由于存在几行未忽略的差异)。