如何在两个目录(a和b)中执行文件的递归diff:
$ diff -r a b
Run Code Online (Sandbox Code Playgroud)
但只能查看名称与给定模式匹配的文件.例如,使用find命令中提供的相同语法,它看起来像:
$ diff -r a b -name "*crazy*"
Run Code Online (Sandbox Code Playgroud)
这将显示a和b中具有相同名称和路径的文件之间的差异,其名称中包含"疯狂".
实际上,我正在寻找与diff中可用的--exclude选项相反的方法.
Fat*_*ror 13
也许这有点间接,但它应该有效.您可以使用find获取与模式不匹配的文件列表,然后"排除"所有这些文件:
find a b -type f ! -name 'crazy' -printf '%f\n' | diff -r a b -X -
Run Code Online (Sandbox Code Playgroud)
在-X -将diff读取从标准输入模式,并排除任何匹配.这应该工作提供您的文件不具有搞笑字符类似*或?在他们的名字.唯一的缺点是你的diff不会包含find命令,所以列出的diff命令没那么有用.
(我只用GNU测试它find和diff).
编辑:
由于只有非GNU find没有-printf,sed可以用作替代方案:
find a b -type f ! -name '*crazy*' -print | sed -e 's|.*/||' | diff -X - -r a b
Run Code Online (Sandbox Code Playgroud)
这也是假设非GNU diff有-X,我不知道.
| 归档时间: |
|
| 查看次数: |
6861 次 |
| 最近记录: |