如何将两个目录的diff复制到一个新目录?

时间:2011-03-10 09:49:11

标签: linux diff directory

假设我有两个目录:D1和D2。

D1(f1,f2,f3,f4) D2(f1,f2)

我想将D1中不在D2中的文件复制到另一个目录D3:

D3(f3,f4)

我如何在linux中执行此操作?

感谢名单, 三位一体

3 个答案:

答案 0 :(得分:2)

看看'dirdiff'包裹。它允许您想要做的事情。

或者,这个bash命令行应该这样做:

for i in `ls D1` ; do if [ -f D2/$i ]; then echo "skip $i" ; else cp D1/$i D3 ; fi  done

请注意ls D1周围的后退 - 不是单引号! (在美式键盘上,它位于〜(代字号))

之下

答案 1 :(得分:0)

从D1复制到D3时,使用-exclude指定D2 它会完成......

答案 2 :(得分:0)

只花了一天的时间来整理类似的东西,然后从较老的question的答案中挑选出来。我最终得到了一个相当复杂的bash脚本:

#!/bin/bash

# setup folders for our different stages
DIST=/var/www/localhost/htdocs/dist/
DIST_OLD=/var/www/localhost/htdocs/dist_old/
DIST_UPGRADE=/var/www/localhost/htdocs/dist_upgrade/

cd $DIST

find . -type f | while read filename
do

    newfile=false
    modified=false
    if [ ! -e  "$DIST_OLD$filename" ]; then
        newfile=true
        echo "ADD $filename"
    elif ! cmp $filename $DIST_OLD$filename &>/dev/null; then
        modified=true
        echo "MOD $filename"
    fi

    if $newfile || $modified; then

        #massage the filepath to not include leading ./
        filepath=$DIST_UPGRADE$(echo $filename | cut -c3-)

        #create folder for it if it doesnt exist
        destfolder=$(echo $filepath | sed -e 's/\/[^\/]*$/\//')
        mkdir -p $destfolder

        #copy new/modified file to the upgrade folder
        cp $filename $filepath
    fi
done