将两个目录与​​每个文件的单独diff输出进行比较

时间:2013-02-24 16:58:20

标签: diff

我需要查看包含不同版本软件源代码的两个目录之间的更改。虽然我找到了获取唯一.diff文件的方法,但如何为两个目录中的每个更改文件获取不同的文件?我需要这个,因为“主要”大约是6 MB,并且想要一些更方便的东西。

3 个答案:

答案 0 :(得分:1)

我也解决了这个问题,所以我最终得到了一些shell脚本。它需要三个参数:源和目标目录(用于diff)和输出的目标文件夹(应该存在)。

有点hacky,但也许对某人有用。因此请小心使用,特别是如果您的路径有特殊字符。

#!/bin/sh

DIFFARGS="-wb"

LANG=C
TARGET=$3
SRC=`echo $1 | sed -e 's/\//\\\\\\//g'`
DST=`echo $2 | sed -e 's/\//\\\\\\//g'`

if [ ! -d "$TARGET" ]; then
  echo "'$TARGET' is not a directory." >&2
  exit 1
fi

diff -rqN $DIFFARGS "$1" "$2" | sed "s/Files $SRC\/\(.*\?\) and $DST\/\(.*\?\) differ/\1/" | \
while read file
do
  if [ ! -d "$TARGET/`dirname \"$file\"`" ]; then
    mkdir -p "$TARGET/`dirname \"$file\"`"
  fi
  diff $DIFFARGS -N "$1/$file" "$2/$file" > "$TARGET"/"$file.diff"
done

答案 1 :(得分:0)

如果你想比较源代码,最好将它作为“svn”提交给源代码程序。

你这样做之后。对上传的代码进行差异处理并将其传递给file.diff

  svn diff --old svn:url1 --new svn:url2 > file.diff

答案 2 :(得分:0)

bash for循环适用于你。下面将使用C源代码区分两个目录,并为每个文件生成一个单独的diff。

for FILE in $(find <FIRST_DIR> -name '*.[ch]'); do DIFF=<DIFF_DIR>/$(echo $FILE | grep -o '[-_a-zA-Z0-9.]*$').diff; diff -u $FILE <SECOND_DIR>/$FILE > $DIFF; done

对以+++

开头的行使用正确的补丁级别