2011-03-10 99 views
4

假设我有两个目录:D1和D2。如何将两个目录的差异复制到新目录?

D1(F1,F2,F3,F4) D2(F1,F2)

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

D3 (f3,f4)

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

感谢名单, 三位一体

回答

0

而从D1复制到D3使用-exclude指定D2 ,它会做...

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 - 不是单引号! (在美式键盘上,它位于〜(波浪号)之下)

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 
相关问题