trouver le répertoire d'exclusion

13

Je suis sous Linux (Ubuntu) et je voudrais exclure certains répertoires (comme .hg) lorsque je fais un

find | less  

J'ai essayé ce qui suit pour exclure le répertoire .hg de la liste, mais cela ne semble pas fonctionner.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Comment exclure .directoryune commande find

Senthil Kumaran
la source

Réponses:

14

Sur la recherche d'une findsolution similaire , j'ai découvert l'explication utile sur la façon d'utiliser l'option '-prune' de 'trouver' dans sh? par Laurence Gonsalves .

Vous pouvez utiliser quelque chose comme:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

ou (sans le nom)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

Les (échappées) entre parenthèses \(et \)regrouper les tests ( typeet name) et les actions correspondantes ( pruneet print, respectivement) , ainsi que gauche et à droite de l'OR ( -o).

Étant donné -oque la priorité est inférieure à la juxtaposition, vous pouvez omettre les parenthèses si vous le souhaitez. De nombreuses findimplémentations vous permettent également de sauter la finale -print.

find . -type d -name .hg -prune -o -type f -name "foo" -print
fheub
la source
1
J'étais sur le point d'écrire ma solution, mais il semble que ce soit exactement cela. Personnellement, je mettrais l' -pruneintérieur du premier ensemble de supports et le -type f -printdans un deuxième ensemble, juste pour rendre les opérations et / ou plus évidentes, mais sinon cela me semble parfaitement clair.
me_and
J'ai amélioré les parenthèses (et leur raisonnement) grâce au commentaire de @me_and.
fheub
2

Jetez un œil à ack: http://betterthangrep.com/

En plus d'avoir un ensemble raisonnable de dossiers exclus par défaut (.hg est une exclusion par défaut par exemple), il est facile d'exclure de nouveaux dossiers:

ack --ignore-dir=.directory search_term

Pour ramener cela à votre cas d'utilisation où vous recherchez une liste de fichiers, vous utiliseriez l' -foption, comme dans:

ack -f --ignore-dir=.directory

Je suis passé de l'écriture de commandes de recherche / recherche alambiquées à de simples commandes d'acquittement.

Conseil: placez les options de ligne de commande couramment utilisées (dossiers exclus par exemple) dans un fichier .ackrc.

Brian Leathem
la source
Sur la base find | lessde la question, l'OP recherche une simple liste de fichiers. Comment cela aide-t-il?
un CVn du
@ MichaelKjörling Comme je l'ai indiqué dans ma réponse, l'option -f fournit une liste de fichiers.
Brian Leathem
-2

tu peux essayer

find \( ! -regex '.*/\.directory\(\|/.*\)' \)
yuyichao
la source
Je suis sûr que cela ne ressemble en rien à ce que le PO a demandé.
me_and
Je pensais juste que c'est ce qu'il entend par.directory
yuyichao