Terminale: grep ricorsivo - non cercare nei contenuti del link simbolico

1

Durante la ricerca con grep -r , evita di seguire i collegamenti simbolici per impostazione predefinita. Questo è vero per le directory, ma grep controlla ancora il contenuto dei file che sono collegamenti simbolici.

Ad esempio, se ho un framework con la seguente struttura:

+-- MyFancy.framework
    +-- MyFancy              (symlink to ./Versions/A/MyFancy)
    +-- Versions
        +-- A
            +-- MyFancy      (the actual binary file)
        +-- Current
            +-- MyFancy      (symlink to ../A/MyFancy)

grep -r "string" MyFancy.framework stampe:

Binary file ./MyFancy matches
Binary file ./Versions/A/MyFancy matches
Binary file ./Versions/Current/MyFancy matches

Ciò causa la ricerca in tali strutture tre volte più lentamente.

Come posso rendere grep escludere i collegamenti simbolici?

    
posta Elist 28.06.2017 - 12:06
fonte

1 risposta

0

Se guardi la pagina man per grep , non esiste l'opzione per escludere i symlinks e pertanto sarà necessario applicare un metodo alternativo. Uno di questi metodi è usare find per produrre solo nomi di percorsi di file usando l'opzione -type t , dove t è impostato a f per regolare file .

Esempio:

 find . -type f -exec grep -l 'search' {} \; 

Dove 'search' è ciò che stai per grep ing, e output sarà il nome percorso relativo al file dei file che lo contiene a causa dell'uso di -l con grep .

Nell'esempio sopra, grep verrà eseguito per ogni nome percorso relativo del file che find passa a
-exec . Siccome grep può gestire più nomi di file , puoi cambiare ; , alla fine del comando , a + per dire a find di passare a tutti il corrispondente nome di file a grep in una volta. Nota che se il numero di nomi di file corrispondenti è grande, la lunghezza consentita della riga di comando potrebbe essere superata.

Nota anche che find ha un insieme piuttosto grande di opzioni , e come tale potresti essere in grado di restringere il output passato grep , a seconda di i tuoi bisogni.

    
risposta data 28.06.2017 - 18:43
fonte

Leggi altre domande sui tag