Pertama-tama, pastikan Anda menggunakan tanda kutip ascii biasa seperti "dan '(kode ascii 0x22dan 0x27, masing-masing) dalam skrip shell, karena contoh dalam posting Anda berisi karakter kutipan non-standar. Jika Anda perhatikan lebih dekat, mereka terlihat sedikit berbeda. Kemungkinan besar ini adalah kesalahan salin-tempel dari format dokumen teks kaya seperti Word, OOWriter, atau bahkan jendela browser.
Karena Anda menggunakan Mac, kemungkinan besar Anda memiliki implementasi FreeBSD sed, dalam hal ini Anda harus menulis perintah dengan cara ini:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(Di sini menggunakan +alih-alih \;menghindari menjalankan satu seddoa per file).
Dalam pelaksanaan FreeBSD dari sedpara -ibendera kebutuhan argumen: ekstensi dari file cadangan. Misalnya dengan -i .bakperintah akan backup file1.txtsebagai file1.txt.bakpertama sebelum melakukan penggantian di file asli. Menggunakan argumen kosong ''berarti tidak menggunakan file cadangan, yang tampaknya seperti yang Anda inginkan.
Hal yang sama dalam implementasi GNU (atau NetBSD, OpenBSD, busybox) adalah:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Terima kasih @bahamat dan @Mikel dan @ pieter-breed untuk meningkatkan jawaban saya dengan komentar Anda.
-execdan semuanya setelah itu? Apakah itu mencetak nama file Java? (Saya khawatir Anda menggunakan kutipan pintar dan bukan kutipan ASCII.)