Przede wszystkim upewnij się, że używasz regularnych cytatów ascii, takich jak "i '(odpowiednio kody ascii 0x22i 0x27) w skryptach powłoki, ponieważ przykład w twoim poście zawiera niestandardowe znaki cytowania. Jeśli przyjrzysz się uważnie, wyglądają nieco inaczej. Najprawdopodobniej jest to błąd kopiowania i wklejania z formatu dokumentu tekstu sformatowanego, takiego jak Word, OOWriter, a nawet okno przeglądarki.
Ponieważ jesteś na komputerze Mac, najprawdopodobniej masz implementację FreeBSD sed, w którym to przypadku musisz napisać polecenie w ten sposób:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(tutaj, +zamiast używać \;jednego sedwywołania na plik).
W realizacji FreeBSD z sedtej -iflagi potrzebuje argument: rozszerzenie pliku kopii zapasowej. Na przykład za -i .bakpomocą polecenia utworzono kopię zapasową file1.txtjako file1.txt.bakpierwszą przed wykonaniem zamiany w oryginalnym pliku. Użycie pustego argumentu ''oznacza nieużywanie pliku kopii zapasowej, który wydaje się być tym, czego chcesz.
To samo w implementacji GNU (lub NetBSD, OpenBSD, busybox) to:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Dziękuję @bahamat i @Mikel i @ pieter-breed za ulepszenie mojej odpowiedzi w twoich komentarzach.
-execi wszystko po nim? Czy drukuje nazwy plików Java? (Martwię się, że używasz inteligentnych cytatów zamiast cytatów ASCII.)