как скопировать diff двух каталогов в новый каталог? - PullRequest
4 голосов
/ 10 марта 2011

Предположим, у меня есть две директории: D1 и D2.

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

Я хочу скопировать файлы в D1,которые не находятся в D2, в другой каталог D3:

D3 (f3, f4)

Как мне сделать это в Linux?

Спасибо, Trinity

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

Посмотрите на пакет "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 голосов
/ 05 июня 2012

Просто потратил большую часть дня, разбирая что-то похожее, и взял ответ из более старого вопроса . Я закончил с довольно сложным 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
0 голосов
/ 10 марта 2011

при копировании из D1 в D3 используйте -exclude, указав D2 и это будет сделано ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...