Перш за все, переконайтеся, що ви використовуєте звичайні котирування 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.)