Come cercare una parola nell'intero contenuto di una directory in Linux


15

è necessario cercare qualcosa nell'intero contenuto

Sto provando:

find . | xargs grep word

Ottengo l'errore:

xargs: citazione non terminata

Come raggiungere questo obiettivo?

Risposte:


15

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

+1 soprattutto per /dev/null. È una seccatura quando il formato di output può variare, a seconda di quanti file sono abbinati ... grazie.
Peter

12

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"

grep -rin per recursive-case_insensitive-show_line_number

Voglio essere in grado di cercare nel contenuto di ogni file.

il primo restituisce qualsiasi occorrenza in qualsiasi file, specificando il file in cui è stata trovata l'occasione

2

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

0

C'è anche ack , è progettato per ignorare le directory speciali come .svn,.git e così via. È uno strumento quotidiano per gli sviluppatori.

È abbastanza vicino a per gli switch comuni.

Ex. :

ack -r string .

Pacchetto ack-grepsu Mi piace debian e debian.



-1

Penso che tu voglia trovare una stringa nei file

Provare find . -name "*" | xargs grep -l "string"


Il messaggio di errore di xargs ("Virgolatura non terminata") indica che l'OP ha un file in. che ha una citazione nel suo nome. La tua linea graccherà anche su quello. Come hai notato mu, hai bisogno di una risoluzione diversa.
thiton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.