1

Здравствуйте.
Нужно написать строку что бы копировать все содержимое с директории и поддиректории. Кроме 3 директорий.
Я пока что придумал связку find + cp но что то пока что не получается.

find /home/rassol2/Документы/test/1/ -path \(rassol2\|TCA.Maps\|TCA.Mods\|TCA.Updates\) -exec cp {} /home/rassol2/Документы/test/2/ \;

Подскажите как быть ?

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

2

Rassol2 пишет:

Подскажите как быть ?

Я бы попробовал rsync с опцией --exclude.

Был, был и весь вышел...

3 (12.05.2014 13:04:38 отредактировано Lupo Alberto)

Rassol2 пишет:

Я пока что придумал связку find + cp но что то пока что не получается.

find /home/rassol2/Документы/test/1/ -path \(rassol2\|TCA.Maps\|TCA.Mods\|TCA.Updates\) -exec cp {} /home/rassol2/Документы/test/2/ \;

Наверное, правильнее так:

find /home/rassol2/Документы/test/1/ -path \(rassol2\|TCA.Maps\|TCA.Mods\|TCA.Updates\) -exec cp -r -t /home/rassol2/Документы/test/2/ {} \;
Был, был и весь вышел...

4

Rassol2, Lupo Alberto, с какого перепуга у вас регулярные выражения в -path?!

Либо юзайте find ! -regex "RE"

Либо каждый каталог прописывайте отдельно.

 Консоль:
find ! \( -path "./.dir1/*" -o -path "./.dir/*" \) -print

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

пришел к решению использовать rsync
Моя строка

rsync -alv -x --exclude=TCA* /home/rassol2/test/1/ /home/rassol2/test/2/

Решает все проблемы.
Последнее время смотрю что rsync заменяет cp ab

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

6

drBatty пишет:

Rassol2, Lupo Alberto, с какого перепуга у вас регулярные выражения в -path?!

Либо юзайте find ! -regex "RE"

Либо каждый каталог прописывайте отдельно.

 Консоль:
find ! \( -path "./.dir1/*" -o -path "./.dir/*" \) -print

Как то сложновато, уделил 2 часа на понимание плюнул, в силу своей слабохарактерности.

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

7

Rassol2 пишет:

Последнее время смотрю что rsync заменяет cp

дык unix-way жеж: каждая утилита должна делать одну задачу, и делать хорошо.

cp хорошо копирует.

find хорошо ищет

тебе хочется синхронизации. Два варианта: либо слепить конвейер-велосипед find|cp, либо решать задачу специальным инструментом rsync. Разве не очевидно, какой способ лучше?

Rassol2 пишет:

Как то сложновато, уделил 2 часа на понимание плюнул, в силу своей слабохарактерности.

find нужна для поиска по условию
Условие может быть любой сложности
Обычно условие связывается союзом «И»(«AND», в find «-a»)
Ты хочешь ИЛИ. И потому тебе нужно во первых прописать ИЛИ явно: «-o», и во вторых использовать скобки, т.к. ИЛИ это "сложение", а оно младше "умножения" И. Да, вся команда внутри bash'а работает, а bash скобки понимает по своему. Потому надо писать «\(» «\)».

Условие «-path "шаблон"» работает как «-name "шаблон"», но в отличие от последнего использует весь путь, а не только имя файла. Каталоги тоже учитываются.

ЗЫЖ конечно самодельный велосипед всё равно хуже танка.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

8

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

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

9

Rassol2, cp может копировать только то, что ты ей указал. Т.е. если тебе надо скопировать файлы 1.jpg, 2.jpg, 3.jpg, то тебе их надо ЯВНО указать все. А если ты запишшешь *.jpg, то за тебя это сделает bash. Потому в cp и нет ключа exclude. Не нужен он ей. Зачем что-то исключать, если можно не указывать?

Потому и приходится сначала искать, а потом копировать. И лучше это делать специальной утилитой, а не велосипедом самосборным.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)