1 votes

Configurer find pour ne même pas regarder dans les répertoires, si le nom du répertoire maches 2012

J'utilise find /home/myid/dir-with100directories/ -mmin -5 -not -path "*/2012/* pour trouver tous les fichiers, sauf ceux qui ne sont pas dans le répertoire 2012, mais d'une manière ou d'une autre, cela fonctionne vraiment très lentement.

Et je suppose que find cherche dans TOUS les répertoires, mais qu'il n'affiche pas/masque les résultats pour 2012 ? Ai-je raison ou ai-je tort ?

2voto

slhck Points 209720

Si vous voulez exclure un chemin d'accès, vous devez le faire correspondre correctement dans le fichier -path option. L'option vous demande d'écrire un chemin d'accès complet, y compris le préfixe du chemin absolu, donc il suffit de /2012/ n'est pas suffisant.

find /home/myid/dir-with100directories/ -mmin -5 \
-not -path '/home/myid/dir-with100directories/2012/*'

Ou :

cd /home/myid/dir-with100directories/
find . -mmin -5 -not -path './2012/*' 

Si vous voulez exclure tout dossier dont le nom est 2012 en elle - avec GNU find :

cd /home/myid/dir-with100directories/
find . -regextype posix-extended -not -regex '.*/2012\(/.*\)?'

Ou, pour élaguer les répertoires portant le nom de 2012 :

cd /home/myid/dir-with100directories/
find . -type d -and -name '2012' -prune -o -print

Ce qui précède imprimera tout le reste comme une action (voir aquí pour plus d'informations).


Si vous utilisez Bash, vous pouvez ignorer l'option 2012 tout de suite :

shopt -s extlob
find /home/myid/dir-with100directories/!(2012) -mmin -5

La même idée avec Zsh :

setopt extendedglob
find /home/myid/dir-with100directories/^2012 -mmin -5

0voto

Jaap Eldering Points 8835

Voir l'option -prune dans la page de manuel de find, et un exemple donné dans la description de l'option -path .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X