Прежде всего, убедитесь, что вы используете обычные кавычки ascii, такие как "и '(коды ascii 0x22и 0x27, соответственно), в сценариях оболочки, потому что пример в вашем посте содержит нестандартные символы кавычек. Если вы посмотрите внимательно, они выглядят немного по-другому. Скорее всего, это ошибка копирования-вставки из форматированного текстового документа, такого как Word, OOWriter или даже из окна браузера.
Поскольку вы работаете на Mac, скорее всего, у вас есть реализация FreeBSD sed, и в этом случае вы должны написать команду следующим образом:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(здесь используется +вместо того, \;чтобы не запускать один sedвызов на файл).
В реализации FreeBSD для sedэтого -iфлага необходим аргумент: расширение файла резервной копии. Например, с помощью -i .bakэтой команды выполняется резервное копирование file1.txtв file1.txt.bakпервую очередь перед выполнением замены в исходном файле. Использование пустого аргумента ''означает не использовать файл резервной копии, который, кажется, то, что вы хотите.
То же самое в реализации GNU (или NetBSD, OpenBSD, busybox) будет:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Спасибо @bahamat и @Mikel и @ Pieter-порода для улучшения моего ответа с вашими комментариями.
-execвсе и после него? Распечатывает ли имена файлов Java? (Я беспокоюсь, что вы используете умные кавычки вместо кавычек ASCII.)