Редактирование
Подстановочной частью является сценарий sed
- назовите его mapname
:
sed -i.bak \
-e 's/generic/something/g' \
-e 's/GENERIC/SOMETHING/g' \
-e 's/Generic/Something/g "$@"
Обратите внимание, что это также изменит слова в комментариях и строках, иизмените «общий» как часть слова, а не просто слово целиком.Если вам нужно только слово, то вы используете маркеры конечных слов вокруг терминов: 's/\<generic\>/something/g'
.-i.bak
создает резервные копии.
Вы применяете это с помощью:
find . -type f -exec mapname {} +
Это создает команду со списком файлов и выполняет ее.Ясно, что вы можете, если хотите, избежать промежуточного сценария mapname
shell / sed (написав сценарий sed
вместо слова mapname
в команде find
).Лично я предпочитаю отлаживать вещи по отдельности.
Переименование
Переименование файлов лучше всего делать с помощью команды rename
, в которой есть два варианта, так что вам нужно будетпрочитайте ваше руководствоИспользуйте одно из этих двух:
find . -name '*generic*' -depth -exec rename generic something {} +
find . -name '*generic*' -depth -exec rename s/generic/something/g {} +
(Спасибо Stephen P за указание на то, что я использовал более мощный вариант на основе Perl rename
с полным Perlспособность регулярного выражения и Зак и Джефроми для указания на то, что Perl найден в реальном мире * тоже.)
Примечания:
- Переименовывает каталоги.
- Вероятно, стоит хранить там
-depth
, чтобы содержимое каталогов переименовывалось перед каталогами;в противном случае вы можете получать сообщения, потому что вы переименовываете каталог, а затем не можете найти в нем файлы (потому что find
дал вам старое имя для работы). - Более простой
rename
будет перемещен *Только от 1050 * до ./something/do_generic.java
.Вам нужно будет выполнить команду более одного раза, чтобы изменить каждый компонент каждого имени файла.
* Используемая мной версия rename
адаптировано из кода в 1-м издании книги «Верблюд».