我有两个目录,它们是同一个软件包的不同版本。我想列出两者之间已经发生变化的所有文件/目录,然后将这些差异复制到新目录。
我一直在尝试使用md5sum
和diff -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
但最终制作了一堆目录而没有文件。
答案 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
等程序的来源。