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


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.