У меня есть дерево каталогов в ./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 - )