2011-03-10 104 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 
相關問題