2012-01-05 4 views
1

Disons que j'ai une structure de répertoires comme siComment utiliser -not dans find?

mkdir -p test/1 
mkdir -p test/2 
mkdir -p test/3 
touch test/1/touch 
touch test/2/touch 
touch test/3/touch 

Comment puis-je trouver tous les fichiers test/ sauf ceux test/2?

+2

peut être un meilleur ajustement pour Serverfault ou Unix et Linux. –

Répondre

1

Une autre courte trouver la variante pour obtenir ce fait est:

find test ! -path "test/2*" 

SORTIE

test 
test/1 
test/1/touch 
test/3 
test/3/touch 
3

Utilisation -prune:

find test -path 'test/2' -prune -or -print 
+0

Cela fonctionne pour moi, mais pouvez-vous expliquer un peu? J'ai personnellement des problèmes avec 'find' et pourquoi des trucs comme ça (' -ou -print') fonctionnent parfois ... –

+0

@DanFego: Je crains de ne pas pouvoir écrire une meilleure explication que celle donnée au '- exemple de prune dans la page de manuel 'find'. – thiton

+0

Ohhhhhhh ça m'a juste frappé. Si le chemin est ''test/2 '', alors c'est' true && true || print', auquel cas 'print' ne se produit pas? Sinon, c'est faux && vrai || print', auquel cas c'est le cas. –

1

Vous pouvez utiliser -not cette façon:

find -not -wholename './test/2*' 
+0

Cela ne montrerait pas ''./Test/20'' et ses sous-répertoires. –

+0

@DanFego: Oui. S'il y a plus de 9 sous-répertoires, ils devraient s'appeler 01, 02 ... :-) – choroba

+0

touche! Bien que quelqu'un trouve cela et commence une question sur la façon de renommer tous leurs répertoires. : P –

Questions connexes