2

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

我一直在尝试不同的脚本,md5sumdiff -Nurq无法获得我想要的结果。

有什么建议吗?

编辑

我最初尝试md5sum使用 s,但这似乎不起作用,尤其是在缺少新文件的情况下。

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

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

但这最终导致了一堆目录并且没有文件。

4

1 回答 1

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.

于 2011-05-17T18:43:58.880 回答