2017-02-20 18 views
0

У меня есть следующие настройки папки на Ubuntu машины:
(скобки обозначают папки)Linux команды/скрипт замещающие папок/каталогов

[main] 
    | 
    |--- [old] 
    |  | 
    |  |--- [thequick] 
    |  |   | 
    |  |   |--- [aaaa] --- some files 
    |  |   |--- [bbbb] --- some files 
    |  |   |--- [cccc] --- some files 
    |  |   |--- [dddd] --- some files 
    |  |   |--- some files 
    |  | 
    |  |--- [brownfox] 
    |  |   | 
    |  |   |--- [aaaa] --- some files 
    |  |   |--- [bbbb] --- some files 
    |  |   |--- [cccc] --- some files 
    |  |   |--- [dddd] --- some files 
    |  |   |--- some files 
    |  |--- ... 
    |  | 
    |  |--- [lazydog] 
    |     | 
    |     |--- [aaaa] --- some files 
    |     |--- [bbbb] --- some files 
    |     |--- [cccc] --- some files 
    |     |--- [dddd] --- some files 
    |     |--- some files 
    | 
    |--- [new] 
      | 
      |--- [thequick] 
      |   | 
      |   |--- [aaaa] --- some files 
      |   |--- [bbbb] --- some files 
      |   |--- some files 
      | 
      |--- [brownfox] 
      |   | 
      |   |--- [aaaa] --- some files 
      |   |--- [bbbb] --- some files 
      |   |--- some files 
      |--- ... 
      | 
      |--- [lazydog] 
         | 
         |--- [aaaa] --- some files 
         |--- [bbbb] --- some files 
         |--- some files 

мне нужно найти быстрый способ заменить все старый [ aaaa] и [bbbb] по их соответствующим папкам [aaaa] и [bbbb], , не затрагивая любые другие старые вещи.

+0

Что вы имеете в виду * заменить * Переместить файлы, содержащиеся ниже 'новый/**/aaaa' к 'старый/**/aaaa'? – user1934428

+0

Здесь задан тот же вопрос. Эта ссылка может помочь http://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one –

ответ

2

Вы можете сделать:

cd /main/old 
find . -type d \(-name 'aaaa' -o -name '-bbbb' \) -exec cp -RfP {} ../new/{} \; 
+0

@FreeBud: Это сработало? – anubhava

0

Это явный и очень стандартный

cd main/old 
for dir in `find . \(-name aaaa -o -name bbbb \) -a -type d` 
do 
    (
    cd .. 
    if [ -d new/$dir ] 
    then 
     rm -rf old/$dir 
     mv new/$dir old/$dir 
    fi 
    ) 
done 
cd ../..