La commande find
La commande find sous Linux est une commande extrêmement puissante qui a une tonne d'options. Elle nous permet de repérer les fichiers les plus gros, les fichiers qui n'ont pas été modifiés depuis 30j…
Exemples
Filtre sur le nom
find . -iname 'power.log'
Cherche dans tous les dossiers contenus dans le répertoire courant un fichier se nommant (de manière insensitive) power.log
find . -name '*.log'
Cherche dans tous les dossiers n'importe quel type de document (fichiers/dossiers) finissant par .log
find -not -name '*log'
Cherche dans le répertoire courant (et uniquement le courant) n'importe quel type de document ne contenant pas (-not) log
Filtre sur le type
find /home/guest1/proj -type f -name '.*'
Recherche uniquement les fichiers (-type f) commençant par . (Concrêtement, les fichiers cachés de Linux) dans le dossier /home/guest1/proj
- f : File
- d : Directory
- l : Symlink
find /opt /usr /var -name foo.scala -type f
Il est également possible de chercher un fichier dans plusieurs dossiers. (/opt /usr et /var). Ici, nous cherchons le fichier foo.scala
find . -type f \( -name "*.c" -o -name "*.sh" \)
De plus, nous pouvons chercher plusieurs fichiers à la fois. Dans cet exemple, nous cherchons à la fois les fichiers en .c et en .sh
Filtrage sur les propriétés des fichiers
find -mtime -2
Affiche tout ce qui a été modifié il y a moins de 2 jours (Unité par défaut)
- - = Moins de
- + = Plus de
- Ø = Exactement
L'argument -size fonctionne uniquement sur les fichiers
find -size +10k
Affiche tous les fichiers de plus de 10KB
- k = Kilo-octets
- M = Mega-octets
- G = Giga-octets
- + = Plus de
- - = Moins de
- Ø = Taille exacte
Exécution
Il est également possible de rediriger la sortie de find automatiquement vers les une commande en utilisant (-exec)
find report -name '*log*' -exec rm {} \;
Recherche tous les fichiers comprenant la chaine log et les supprime (Le {} indique le fichier courant, et le \; est indispensable (Le \ sert juste à echaper le ; ))
Il est également possible de faire cette même commande avec (-delete)
find report -name '*log*' -delete
find -name '*.txt' -exec wc {} +
Ici, nous prenons tous les fichiers finissant par .txt et nous exécutons la commande sur tous ces fichiers. La différence avec la première est qu'ici nous cumulons les résultats (Avec le + (Qui n'a pas besoin d'être echaper))