用于确定目录'diff'的脚本

时间:2011-05-17 18:02:31

标签: command-line diff md5sum

我有两个目录,它们是同一个软件包的不同版本。我想列出两者之间已经发生变化的所有文件/目录,然后将这些差异复制到新目录。

我一直在尝试使用md5sumdiff -Nurq的不同脚本,但无法获得我正在寻找的结果。

有什么建议吗?

修改

我最初尝试使用md5sum,但这似乎不起作用,特别是如果缺少新文件。

接下来我尝试了这样的循环:

for x in `diff -Nurq ./dir1/ ./dir2/ | awk -F" " '{print $4}'`
do 
  mkdir -vp ./dir_1_2_upgrade/$x; 
  cp $x ./dir_1_2_upgrade/$x
done

但最终制作了一堆目录而没有文件。

1 个答案:

答案 0 :(得分:1)

source=SOME_DIR
dest=OTHER_DIR

# TODO: rewrite as awk script
delta=`diff -ur $source $dest`
deleted=`echo "$delta" | grep "^Only in ${source}:" | sed "s/^Only in ${source}: //"`
added=`echo "$delta"   | grep "^Only in ${dest}:"   | sed "s/^Only in ${dest}: //"`
changed=`echo "$delta" | grep '^\+\+\+' | awk '{print $2}'`

echo $deleted
echo $added
echo $changed
如果文件名不包含空格,则

有效。如果您希望这样做尽可能一般,请查看git-diff等程序的来源。