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

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

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.


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\(\|/.*\)' \)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.