2010-05-13 16 views
5

Ho un comando find che eseguo per trovare i file i cui nomi contengono foo.Come posso evitare che trovi la stampa delle cartelle .git?

Desidero saltare la directory .git. Il comando di seguito funziona tranne stampa un fastidiosa .git ogni momento salta una directory .git:

find . (-name .git) -prune -o -name '*foo*' 

Come posso evitare che la saltato .git directory da stampa sullo standard output?

+1

la sintassi '(-name .git)' non ha senso – msw

+0

Destra - penso che dovrebbe essere \\ (-name .git \\) , corretta? –

risposta

1

Provate questo:

find . -name '*foo*' | grep -v '\.git' 

Questo sarà ancora attraversare nelle directory .git, ma non li visualizzerà. Oppure si possono combinare con la versione:

find . (-name .git) -prune -o -name '*foo*' | grep -v '\.git' 

Si può anche fare a meno di grep:

find . (-name .git) -prune -printf '' -o -name '*foo*' -print 
+0

Okay - Ho scoperto che non devo mettere il -printf '' - Devo solo mettere il -print sul retro del comando! Ad esempio, questo funziona: trovare. \ (-name .git \) -prune -o -name '* foo *' -print Grazie! –

+0

L'uso di grep after find è un brutto scherzo per molte ragioni. Prendi in considerazione l'utilizzo delle opzioni integrate in find per il filtro –

8

Quindi, solo per una migliore visibilità:

find -name '.git*' -prune -o -name '*foo*' -print 

Questo omette anche i file .gitignore; si noti il ​​trailing -print per omettere la stampa, -prune si ferma scendendo in esso ma senza -print lo stampa comunque. Twisted C;

+0

Ecco come trovare le directory: find. -name '.git \ *' -prune -o -name '\ * foo \ *' -maxdepth 4 -type d -print – Lionel

2
find . -not -wholename "./.git*" -name "*foo*" 

o, più propriamente, se non si desidera visualizzare .git/ma voglio cercare in altre dirs il cui nome inizia anche con .git (.git-foo/bar/...)

find . -not -wholename "./.git" -not -wholename "./.git/*" -name "*foo*" 

Un po ' odder ma più efficiente perché pota l'intero .git dir:

find . -not \(-wholename "./.git" -prune \) -name "*foo*" 
Problemi correlati