Перш за все, переконайтеся, що ви використовуєте звичайні котирування 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 та @ pitter-dog за вдосконалення моєї відповіді з вашими коментарями.
-execі все після нього? Чи друкує назви файлів Java? (Я переживаю, що ви використовуєте розумні котирування замість цитат ASCII.)