Risposte:
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 citato sull'input xargs
(probabilmente contenente un'
).
Se grep supporta l' opzione -r
o -R
per la ricerca ricorsiva, utilizzala.
grep -r word .
Altrimenti, usa il -exec
primario di find
. Questo è il solito modo di ottenere lo stesso effetto xargs
, tranne senza vincoli sui nomi dei file. Versioni relativamente recenti di find
consentono di raggruppare più file in una singola chiamata al comando ausiliario. Passando /dev/null
per grep
assicurarsi che mostrerà il nome del file davanti a ogni partita, anche se capita di essere chiamato su un singolo file.
find . -type f -exec grep word /dev/null {} +
Le versioni precedenti di find
(su sistemi precedenti o OpenBSD o utilità ridotte come BusyBox) possono chiamare il comando ausiliario 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, usando caratteri null per separare i nomi dei file in modo che non sia richiesta alcuna quotazione. In questi giorni, solo OpenBSD ha questa funzione senza -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Immagino che intendi la prima opzione
grep ricorsivo, per la ricerca di contenuti all'interno di file
grep -R "content_to_search" /path/to/directory
È ricorsivo, per la ricerca di file corrispondenti
ls -lR | grep "your_search"
Se hai gli strumenti GNU (cosa che fai se il tag Linux è accurato) allora puoi usare -print0
e -0
aggirare i soliti problemi di quotazione:
find . -type f -print0 | xargs -0 grep word
Nella directory corrente è possibile utilizzare grep:
grep -irl root .
Penso che tu voglia trovare una stringa nei file
Provare find . -name "*" | xargs grep -l "string"
/dev/null
. È una seccatura quando il formato di output può variare, a seconda di quanti file sono abbinati ... grazie.