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