Come trovare file con un determinato testo nel Terminale


168

Vorrei trovare tutti i file che contengono una determinata stringa di testo. Come lo faresti nel Terminal?


Se vuoi un risultato veloce, usa Spotlight, comunque. Inoltre, se si desidera trovare file che non memorizzano necessariamente il testo direttamente all'interno del file come PDF o ODF.
Joey,

Un buon consiglio, ma nel mio caso non sono sicuro che i file siano indicizzati poiché si trovano su driver di rete. E anche loro sono file XML appartenenti ad un particolare programma.
Svish,

Dai un'occhiata a unix.stackexchange.com/a/37932/213832 questa soluzione funziona bene
boyd4715

Risposte:


280
grep -r 'text goes here' path_goes_here

1
Suggerirei man grepdi scoprire tutte le meravigliose opzioni di grep
Ludovic Kuty,

Questo elenca tutti i file esistenti nel percorso e aggiunge: No such file or directory Sto cercando di ottenere solo l'elenco delle occorrenze di testo. Come possiamo ottenere quell'elenco?
CP3O

7
Capito: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

Ma questo restituisce il contenuto dei file corrispondenti, non i dettagli del file (nome, percorso). Il suggerimento di @ CP3O funziona.
geoteca

28

usa i riflettori

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

non dimenticare di guardare:

man mdfind

2
Funzionerà con i file che Spotlight non indicizza (ovvero file all'interno di cartelle nascoste, file di configurazione del sistema, ecc.)?
Peter Berg,

Grep non sembra analizzare i file .xlsx, ma questo ha funzionato bene. Un altro semplice esempio: mdfind -onlyin. "searchtext"
FvD

11
  1. Attraverso Ack

brew install ack ack "text goes here"

  1. Attraverso find

find . |grep "text goes here"

  1. Attraverso grep

grep -RnslI "text goes here"


4

Puoi scegliere una delle opzioni seguenti in base ai tuoi gusti e alle tue esigenze. Supponendo che sia necessario cercare file contenenti testo: "asincrono", ricorsivamente nella directory corrente, è possibile farlo in uno dei modi seguenti:

Usando grep inserisci qui la descrizione dell'immagine

Usando ack inserisci qui la descrizione dell'immagine


2

La risposta di Ignacio è ottima e mi ha aiutato a trovare i file contenenti determinati testi. L'unico problema che stavo affrontando era che durante l'esecuzione di questo comando venivano elencati tutti i file, incluso uno in cui il modello non veniva visualizzato.

No such file or directory Questo è quello che vedo accanto ai file che non contengono il modello.

Se invece aggiungi -sal comando, come in grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -sviene utilizzato, ti mostrerà solo quali file contengono il modello.

Allo stesso modo se grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sviene utilizzato il comando stampa il file più il numero di riga e l'occorrenza del modello.

Per favore, correggimi se la mia comprensione è sbagliata.

Riferimento: Come posso fare in modo che grep non stampi errori "Nessun file o directory del genere"?


Un altro modo per evitare questi fastidiosi errori di file di questo tipo , è quello di pipe stderr su null. grep ... 2>/dev/null. Questa soluzione funziona per la maggior parte dei programmi, poiché riportano messaggi di errore sul flusso stderr, non stdout. Ho usato questa soluzione molte volte con find, come dirà Autorizzazione negata per molti file.
jpaugh

(1) Se ricevi No such file or directorymessaggi per i file esistenti, stai facendo qualcosa di sbagliato o il tuo sistema è guasto. (2) Cosa [PATH OF PARENT]c'entra con qualcosa?
G-Man,

@G-Man ho modificato la risposta per mostrare [PATH OF DIRECTORY]solo se qualcuno che non conosceva voleva sapere perché l'avevo messo./
CP3O

@G-Man sto usando un mac non Ubuntu, non sono sicuro di come il mio sistema si sarebbe rotto, non ci ho ancora fatto nulla.
CP3O
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.