Risposte:
xargssi 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 -ro -Rper la ricerca ricorsiva, utilizzala.
grep -r word .
Altrimenti, usa il -execprimario di find. Questo è il solito modo di ottenere lo stesso effetto xargs, tranne senza vincoli sui nomi dei file. Versioni relativamente recenti di findconsentono di raggruppare più file in una singola chiamata al comando ausiliario. Passando /dev/nullper grepassicurarsi 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 finde xargshanno 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 -print0e -0aggirare 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.