xargs si aspetta input in un formato che nessun altro comando produce, quindi è difficile da usare in modo efficace. Quello che non va qui è che hai un file il cui nome deve essere quotato in input a xargs (probabilmente contenente un ' ).
Se il tuo grep supporta -r o -R opzione per la ricerca ricorsiva, usala.
grep -r word .
Altrimenti, usa il -exec primario di find . Questo è il solito modo per ottenere lo stesso effetto di xargs , tranne che senza vincoli sui nomi dei file. Versioni ragionevolmente recenti di find consentono di raggruppare più file in un'unica chiamata al comando ausiliario. Passaggio /dev/null a grep assicura che mostrerà il nome del file prima di ogni corrispondenza, anche se capita di essere chiamato su un singolo file.
find . -type f -exec grep word /dev/null {} +
Versioni precedenti di find (su sistemi più vecchi o OpenBSD, o utilità ridotte come BusyBox) può chiamare il comando ausiliario solo su un file alla volta.
find . -type f -exec grep word /dev/null {} \;
Alcune versioni di find e xargs hanno estensioni che consentono loro di comunicare correttamente, utilizzando caratteri nulli per separare i nomi dei file in modo che non sia richiesta alcuna citazione. Al giorno d'oggi, solo OpenBSD ha questa caratteristica senza avere -exec … {} + .
find . -type f -print0 | xargs -0 grep word /dev/null
Immagino tu intenda la prima opzione
grep ricorsivo, per la ricerca di contenuti all'interno dei file
grep -R "content_to_search" /path/to/directory
è ricorsivo, per la ricerca di file che corrispondono
ls -lR | grep "your_search"
Se hai gli strumenti GNU (cosa che fai se il tag Linux è accurato) allora puoi usare -print0 e -0 per aggirare i soliti problemi di quotazione:
find . -type f -print0 | xargs -0 grep word