(Отредактировано после повторного прочтения вопроса. Спрашивающий говорит, что rsync не установлен)
Возможная проблема с вашим решением find / xargs - пробелы в именах файлов. Чтобы обойти это, скажите find и xargs использовать нулевой символ (ASCII 0) для разделения найденных файлов:
find ./sourcedirectory -not ( -name .svn -a -prune ) -print0 | xargs -0 -IFILES cp FILES ./destinationdirectory
Если вы обнаружите, что rsync доступен, я все же думаю, что rsync - гораздо лучшее решение:
Используйте rsync с опцией -C. Со страницы руководства rsync :
Это полезное сокращение для исключения широкого диапазона файлов, которые вы часто не хотите передавать между системами. Он использует алгоритм, аналогичный CVS, чтобы определить, следует ли игнорировать файл.
Это скажет rsync игнорировать эти шаблоны:
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .bzr/
Например:
rsync -avC /path/to/source/directory /path/to/destination/directory
(примечание: если вы еще не слишком знакомы с rsync, обязательно прочитайте на этой странице руководства о том, как rsync справляется с завершающей косой чертой в исходном пути. Если вы включите косую черту, она будет вести себя иначе, чем если бы вы этого не делали. Поиск "косая черта")