2011-04-13 2 views
0

У меня есть два каталога: A и B. Я хочу сравнить каталог B с A. Каталог A и каталог B имеют множество общих каталогов (содержит то же) и файл.
Если файл отсутствует в каталоге A, скопируйте файл в каталог C, сохранив структуру каталогов.Сравнение двух каталогов рекурсивно, копирование содержимого каталога в третий каталог с использованием сценария оболочки

например. Если в каталоге A следующий относительный путь не существует.

B/hellboy/MyScripts/dir1/ 

Я хочу, чтобы скопировать этот путь и дочерние файлы и директории в каталог C.

Я пробовал много с командой дифф. Но я думаю, что это невозможно. Пожалуйста, помогите мне выбраться из этого.

+0

Windows или Linux? – ds27680

+0

linux opreating system – Vivek

+0

'diff dira dirb' – kurumi

ответ

0

Посмотрите на rdiff-backup (родственник rsync), он может обеспечить то, что вы хотите из коробки.

+0

Я хочу написать сценарий и как исходный, так и целевой каталог на том же компьютере – Vivek

0

Является ли следующий фрагмент скрипта близким к тому, что вы ищете?

#!/usr/bin/env bash 

# Setup for testing: 
# mkdir -p A/l1-{1,2,3}/l2-{4,5,6} 
# mkdir -p B/l1-{2,3,4,5}/l2-{1,2,3,4} 
# touch B/l1-{3,4,5}/l2-{2,3,4}/file-${RANDOM} 
# touch {A,B}/l1-2/l2-4/never_goes_to_C 

while read f d _; do 
    if [ -e "A/$f" ]; then 
    echo "---> FOUND: A/$f" 
    else 
    echo "---> NOT FOUND: A/$f, moving to C" 
    mkdir -p "C/$d" && cp -a "B/$f" "C/$d" 
    fi; 
done < <(cd B; find . -printf "%p %h\n") 
Смежные вопросы