Существует несколько возможностей:
Использование find:
Использование find для создания списка всех файлов, а затем передача их в sed
или эквивалент, как указано в ответе, на который вы ссылаетесь, довольно прост и требует сканирования файлов один раз.
Вы бы использовали один из тех же ответов, что и в вопросе, на который вы ссылались, но добавив -path '*/.svn' -prune -o
послеfind .
для удаления каталогов SVN.См. в этом вопросе для обсуждения использования опции prune
с find
- хотя обратите внимание, что у них неправильный шаблон.Таким образом, чтобы распечатать все файлы, вы должны использовать:
find . -path '*/.svn' -prune -o -type f -print
Затем вы можете передать это в вызов xargs
или что угодно, чтобы сделать отдельные замены, как предложено в вопросе, на который вы ссылались.Там много обсуждают различные варианты, которые я не буду здесь воспроизводить, хотя я предпочитаю версию из ответа Джона Цвинка :
find . -path '*/.svn' -prune -o -type f -exec sed -i 's/foo/bar/g' {} +
Использование рекурсивного grep:
Если у вас есть система с GNU grep, вы также можете использовать ее для поиска списка файлов.Это, вероятно, менее эффективно, чем find, но оно позволяет вам вызывать sed
только для файлов, которые соответствуют, и я лично нахожу синтаксис намного легче запомнить (или выяснить из manpages):
sed -i 's/foo/bar/g' `grep -l -R --exclude-dir='*/.svn' 'foo' .`
Опция -l
заставляет grep выводить только список имен файлов, а не соответствующие строки.
Использование редактора графического интерфейса пользователя:
Альтернативно,если вы используете windows, делайте то, что я делаю - получите копию редактора NoteTab (доступно в бесплатной версии) и используйте его команду search-and-replace-on-disk, которая автоматически игнорирует скрытые каталоги .svn ипросто работает.
Редактировать: Исправлен шаблон поиска в */.svn
вместо .svn
, добавлено больше деталей и некоторые другие возможности.Однако это зависит от вашей платформы и версии svn: в некоторых случаях может потребоваться .svn
без */
, например, в CentOS 7.