Назад | Перейти на главную страницу

Как я могу скопировать все файлы из одного дерева в другое, кроме тех, которые соответствуют шаблону?

У меня есть дерево каталогов в ./src/

У меня есть другое подходящее дерево каталогов в ./work/

Я пытаюсь скопировать все файлы в src для работы, сохраняя структуру каталогов и исключая все файлы, которые заканчиваются на .java.

Вот моя попытка:

find src -type f ! -iname *.java -exec cp {} work \;

Это почти работает, но все файлы помещаются на верхний уровень работы, а не в правильное место в дереве каталогов.

Как я могу это сделать? (с использованием bash в Mac OS X 10.9)

tar cCf /source/path - --exclude "*.java" . | tar xCf /target/path -

rsync -a --exclude='*.java' src/ work/

Ты можешь использовать {} многократно. Так:

find src -type f ! -iname '*.java' -exec cp {} work/{} \;

попытается сохранить путь (и потерпит неудачу, потому что каталог, вероятно, не существует. - однако вы, вероятно, могли бы сделать:

-exec mkdir -p `dirname {}` \;

Однако за то, что вы делаете, вы наверное хотите использовать tar:

find src -type f ! -iname '*.java' | xargs tar cvf - | ( cd work && tar xvf - )