рекурсивно копировать все файлы из одного каталога в другой за исключением

8

Как мне нужно скопировать все файлы, кроме пары каталогов из одного каталога в другой. например:

cp -R test /www/test2 would copy all

Но я хочу исключить 2 папки с именем log и logs.

Я попробовал что-то вроде:

find ~test -not -name logs,log |  cp -R test /www/test2 

Но можете ли вы помочь мне с синтаксисом?

Мичил
источник

Ответы:

10

Используйте rsync:

rsync -a --exclude=logs --exclude=log from/ to/
BoBaH
источник
Рынск вроде работал круто для меня!
Майкл
rsync теперь мой новый друг :) Спасибо, объяснение аккуратное
Алекс
2

Я думаю, что вы ищете что-то вроде:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}
Тим Пот
источник
@sputnick посмотри мои изменения. Не стесняйтесь предложить emacs regex для этого, если вы случайно это знаете.
Тим Пот
0

При использовании :

shopt -s extglob
cp -R test/!(log|logs) /www/test2

Смотрите http://wiki.bash-hackers.org/syntax/pattern

Жиль Квено
источник
Что происходит , когда структура так: test/someotherdir/logs? ОП никогда не говорил logи logsбыл вторым по величине каталогом.
Тим Пот
Если вы перечитываете OP, find ~test -not -name logs,logжурнал и журналы должны быть вложенными.
Жиль Квено
findпросматривает все подкаталоги рекурсивно . Глобализация файла - нет. Для вашего ответа на работу, logи logsдолжны быть непосредственные подкаталоги test.
Тим Пот