рекурсивно копіюйте всі файли з одного каталогу в інший за винятком


8

Як мені потрібно скопіювати всі файли, крім пари каталогів з одного каталогу в інший. наприклад:

cp -R test /www/test2 would copy all

Але я хочу виключити 2 папки під назвою журнал і журнали.

Я спробував щось на кшталт:

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

Але чи можете ви мені допомогти з синтаксисом?

Відповіді:


10

Використовуйте rsync:

rsync -a --exclude=logs --exclude=log from/ to/

rynsc свого роду працював здорово для мене!
— Micheal

rsync тепер мій новий друг :) Дякую, пояснення акуратне
— Алекс

2

Я думаю, ти шукаєш щось на кшталт:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}

@sputnick дивіться мої зміни. Не соромтеся запропонувати для цього регулярний вираз emacs, якщо вам трапляється це знати.
— Тім Пот

0

Якщо використовується :

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

Дивіться http://wiki.bash-hackers.org/syntax/pattern


Що відбувається, коли структура така test/someotherdir/logs:? ОП ніколи не говорив logі logsбув другим за версією каталогом.
— Тім Пот

Якщо ви перечитали find ~test -not -name logs,logжурнал команд OP, журнали та журнали повинні бути субдирекцією.
— Жилль Кінот

findрекурсивно переглядає всі підкаталоги. Глобулювання файлів не робить. Щоб ваша відповідь працювала, logі logsповинні були бути негайними підкаталогами test.
— Тім Пот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.