代码之家  ›  专栏  ›  技术社区  ›  Kimvais

如何仅区分源文件?

  •  8
  • Kimvais  · 技术社区  · 16 年前

    我有两个几乎相似的源代码树,但无法访问源代码存储库,因此我只能使用包含测试报告、文档、二进制文件等的发布包。

    这个 diff 仅命令支持 --exclude ,但我想做一些 diff -wbur --include='*.c,*.h' tree1 tree2

    我知道 this question 有点关联,但没有真正解决我的问题。

    忽略完全在C注释中的更改块的加分:)

    5 回复  |  直到 11 年前
        1
  •  14
  •   Kimvais    16 年前

    在谷歌的帮助下,对结果做了一些小小的修改 tree1 find . -name '*.[ch]' -exec diff -wibu {} ../tree2/{} \;

        2
  •  4
  •   Eli Rosencruft    13 年前

    下面是一个小补丁程序脚本:

    #!/bin/bash
    
    USAGE="USAGE: $0 <dist dir> <edited dir>"
    
    [ '--help' == "$1" ] && { echo $USAGE; exit 0; }
    [ 2 -eq $# ] || { echo $USAGE; exit 1; }
    
    # trim starting './' and trailing /'/
    original=$(echo $1 | sed 's-^\./--;s-/$--')
    changed=$(echo $2 | sed 's-^\./--;s-/$--')
    
    [ -d $original ] || { echo "ERROR: Directory $original does not exist" >&2 ; exit 2; }
    [ -d $changed ] || { echo "ERROR: Directory $changed does not exist" >&2; exit 3; }
    
    #command="ls -l"
    command="diff -Naur"
    
    find $original -name '*.[ch]' -o -name '*.cpp' | sed 's-^[^/]*/--' | { while read file; do $command  $original/$file $changed/$file; done; }
    
        3
  •  2
  •   Community Mohan Dere    12 年前

    我会排除所有与.c或.h不匹配的文件,因此这意味着它只包括.c和.h文件:

    diff -x "*.[^ch]"
    

    对我来说这是最好的方法,因为你只使用diff

        4
  •  2
  •   Bastian    11 年前

    您可以将要排除的所有文件写入一个临时文件并将其交给diff's -X 争论。

    find tree1 tree2 -type f -not -name '*.[ch]' >exludes
    diff -wbur tree1 tree2 -X excludes
    

    或者更简单(在bash中工作):

    diff -wbur tree1 tree2 -X <(find tree1 tree2 -type f -not -name '*.[ch]')
    

    如果文件扩展名较长,则可以使用多个名称参数:

    diff -wbur tree1 tree2 \
      -X <(find tree1 tree2 -type f -not -name '*.java' -and -not -name '*.sql')
    
        5
  •  0
  •   geckos    11 年前

    我提出了一个比找到不同的维护者更容易的解决方案,下面是线程: http://lists.gnu.org/archive/html/bug-diffutils/2014-10/msg00000.html

    这个想法是提供一个新的选项,它指示diff解析与regex匹配的文件,例如: diff -Nurp --only "*.[hc]" source/ source-new/

    以下是修补扩散的说明

    复制回购协议 git clone git://git.savannah.gnu.org/diffutils.git

    运行 bootstrap.sh 在diffutils目录中并解析依赖项,直到它创建./cofigure脚本

    从上面的链接下载补丁

    应用它 git apply <PATCHFILE>

    配置和编译 ./configure make

    这将在src/diff中创建修补的diff

    干杯

    推荐文章