Comment chercher un fichier en excluant un ou plusieurs répertoires ?
Vous connaissez la commande 'find' mais savez-vous comment exclure un répertoire de votre de recherche. Je me suis trouvé confronté à cette problématique lorsque j'ai voulu trouver des fichiers son sur mon système en évitant mon dossier /home où se trouve notamment ma bibliothèque 'Musique'.
Bien sûr on peut (il faut) lire la page man de find, elle existe même en français, mais un survol rapide ne m'avait pas permis de trouver la bonne formulation immédiatement.
Je savais effectuer une recherche simple d'un fichier de type .mp3 ou .ogg sur mon système, avec par exemple:
# find / -iname *.mp3 -o -iname *.ogg
Bien sûr cette commande me retourne tous les fichiers contenus dans le dossier Musique. En fait je cherche des fichiers d'échantillons de sons comme une sonnerie, ou autres jingles que pourrait utiliser le système et non l'utilisateur. Pour cela l'option -prune est à utiliser mais il faut lui indiquer le chemin/path du répertoire à ne pas prendre. On obtient alors:
# find / -path /home -prune -o -iname *.mp3 -o -iname *.ogg
Note:
- Nous sommes en commande administrateur (#) du fait de la recherche sur la racine /
- -o égale l'opération logique 'or' même si je n'ai pas vraiment compris son utilité après -prune, mais son absence modifie le résultat en omettant ici les fichiers .mp3 !?.
Comment exclure plusieurs répertoires ?
Imaginons cette fois que nous cherchons ces fichiers son dans notre répertoire utilisateur (/home/<nom_utilisateur>) mais en excluant le répertoire Musique et un autre répertoire que nous appellerons Documents/Audio. Afin de s'éviter l'écriture du chemin/path complet, on s'assure d'être sur le bon répertoire de travail avec la commande pwd (« print working directory ») sinon on se déplace dans le répertoire /home/<nom_utilisateur> avant de lancer la commande find qui va bien:
$ cd /home/<nom_utilisateur> $ find . \( -path ./Musique -o -path ./Documents/Audio \) -prune -o -iname *.mp3 -o -iname *.ogg
Pour terminer voici un lien sur stackoverflow qui m'a été utile (mais en anglais). Sinon comme dit au début de cet article la lecture de la page man vous apportera toutes les précisions souhaitées.