Introduction
Premièrement, la commande find Linux permet de rechercher un fichier sous linux.
En outre, et comme nous l’avons vu dans le précédent tutoriel des commandes linux de base, vous pouvez utiliser la commande man pour avoir plus de détails sur l’utilisation de la commande Linux find et ses options.
Ainsi, en exécutant la commande man find, vous obtiendrez les informations suivantes :
FIND(1) Manuel de l’utilisateur Linux FIND(1) NOM find - Rechercher des fichiers dans une hiérarchie de répertoires SYNOPSIS find [chemin...] [expression] DESCRIPTION Cette page de manuel documente la version GNU de find. find parcourt les arborescences de répertoires commençant en chacun des chemins mentionnés, en évaluant les expressions fournies pour chaque fichier rencontré. L’évaluation de l’expression se fait de gauche à droite, en suivant des règles de priorité décrites dans la section OPÉRATEURS, jusqu’à ce que le résultat soit connu (par exemple la partie gauche vraie pour un opérateur OU ou fausse pour un opérateur ET). Le premier argument commençant par ‘-’, ‘(’, ‘)’, ‘,’, ou ‘!’ est considéré comme le début de l’expression, tous les arguments précédents sont des chemins à parcourir. Tous les arguments ultérieurs sont considérés comme le reste de l’expression rationnelle. de point de départ. Si aucune expression n’est fournie, find utilise l’expression ‘-print’ par défaut. find se termine avec le code de retour 0 si tous les fichiers ont pu être examinés correctement, et supérieur à 0 si une erreur s’est produite. .... ....
Ainsi, la commande find permet de trouver des fichiers répondants aux critères que vous définissez.
Utilisation de la commande find
La syntaxe de la commande find est comme suit :
find répertoire critères
Dont le répertoire est le chemin sur lequel la recherche est exécutée et les critères sont une suite d’expressions permettant d’affiner la recherche.
Les options de la commande find les plus utilisées sont les suivantes :
- -name : filtrer par rapport au nom du fichier
- -type : filtrer par rapport au type du fichier
- -size : filtrer par rapport à la taille du fichier
- -ctime : filtrer par rapport à la date de création du fichier
- -atime : filtrer par rapport à la dernière date d’accès au fichier
- -mtime : filtrer par rapport à la dernière date de modification du fichier
- -user : filtrer par rapport au propriétaire du fichier
- -group : filtrer par rapport au groupe du fichier
- -perm : filtrer par rapport au permission du fichier
Exemples :
1- Créer les fichiers fichier1, fichier2 et testfichier1 dans le répertoire /tmp puis trouver ceux qui commencent par “fich“ à l’aide de la commande linux find :
[root@centos ~]# touch /tmp/fichier1 [root@centos ~]# touch /tmp/fichier2 [root@centos ~]# touch /tmp/testfichier1 [root@centos ~]# find /tmp -name fichier1 /tmp/fichier1 [root@centos ~]# find /tmp/ -name fich* /tmp/fichier2 /tmp/fichier1
2- Trouver les fichiers dont le nom commence par “fich” ou par “test” dans le répertoire /tmp :
[root@centos ~]# find /tmp \( -name 'fich*' -o -name 'test*' \) /tmp/fichier2 /tmp/testfichier1 /tmp/fichier1
3- Trouver tout les fichiers dans le répertoire /tmp :
[root@centos ~]# find /tmp -type f /tmp/fichier2 /tmp/.X0-lock /tmp/fichier1 /tmp/.X2-lock
A l’aide de l’option –type f, on a pu lister l’ensemble des fichiers disponibles dans le répertoire /tmp notamment fichier1 et fichier2 qu’on vient de créer dans l’exemple précédent. Pour rechercher des répertoires, utilisez l’option -type d (d pour directory).
[root@centos ~]# ls -l /tmp total 48 -rw-r--r--. 1 root root 0 14 mai 21:32 fichier1 -rw-r--r--. 1 root root 0 14 mai 21:32 fichier2 ...
Les deux fichiers qu’on a créé sont encore vides (taille 0 ko noté en rouge). On va écrire du contenu dans fichier1 pour que sa taille soit non nulle comme suit :
[root@centos ~]# echo "contenu" > /tmp/fichier1 [root@centos ~]# ls -l /tmp total 52 -rw-r--r--. 1 root root 8 14 mai 21:51 fichier1 -rw-r--r--. 1 root root 0 14 mai 21:32 fichier2 ...
4- Donc, on peut lister les fichiers disponibles sous /tmp et dont la taille est supérieure à 0 ko
[root@centos ~]# find /tmp -type f -size +0k /tmp/fichier2
5- Cependant, pour trouver les fichiers vides, on utilisera l’option -empty :
[root@centos ~]# find /tmp -type f -empty /tmp/fichier2
Les deux fichiers fichier1 et fichier2 appartiennent à l’utilisateur root et le groupe root, donc on peut filtrer par ces deux informations.
6- Ainsi, trouver les fichiers appartenant à l’utilisateur root et le groupe root peut se faire comme suit :
[root@centos ~]# find /tmp -type f -user root -group root /tmp/fichier2 /tmp/fichier1 ...
Les deux fichiers ont été créés avec les permissions rw-r–r– ce qui équivaut à 644 comme le montre le résultat de la commande ls :
[root@centos ~]# ls -l /tmp total 48 -rw-r--r--. 1 root root 0 14 mai 21:32 fichier1 -rw-r--r--. 1 root root 0 14 mai 21:32 fichier2 ...
7- Trouver les fichiers disponibles sous /tmp et dont les permission sont 644 :
[root@centos ~]# find /tmp -type f -perm 644 /tmp/fichier2 /tmp/fichier1 ...
Exemples – suite
Le résultat de la commande ls montre aussi que les deux fichiers fichier1 et fichier2 ont été modifié le 14 mai à 21:32. Ainsi, on peut aussi utiliser cette information comme suit :
8- Trouver les fichiers dont la date de modification est antérieure à 2 jours et 10 jours :
[root@centos ~]# date dim. mai 21 14:45:39 CEST 2017
La commande date permet d’afficher la date actuelle.
Donc, on est le 21 mai et ainsi, presque 7 jours nous séparent de la dernière date de modification des deux fichiers (14 mai).
[root@centos ~]# find /tmp -type f -mtime +2 /tmp/fichier2 /tmp/fichier1 ...
On vient de lister les fichiers disponible sous /tmp et dont la dernière date de modification dépasse 2 jours.
Cependant, si on essaye de faire la même chose pour 10 jours, les deux fichiers ne seront pas listés.
[root@localhost oracle]# find /tmp -type f -mtime +10 ...
L’option -exec
On vient de tester la commande find en utilisant plusieurs options pour retourner le résultat souhaité.
Maintenant, ce qui serait intéressant à faire est de solliciter la liste des résultats et l’afficher différemment ou lui apporter quelques modifications. Ceci est possible grâce à l’option -exec.
1- Par exemple, trouver les fichiers sous /tmp et afficher le résultat en format long se fait de cette manière :
[root@localhost oracle]# find /tmp -type f -exec ls -l {} \; -rw-r--r--. 1 root root 0 14 mai 21:32 /tmp/fichier2 -rw-r--r--. 1 root root 8 14 mai 21:51 /tmp/fichier1 ...
2- Ensuite, on peut trouver les fichiers sous /tmp dont les permissions sont 644 et changer leurs permission en 777 (rwxrwxrwx) :
[root@localhost oracle]# find /tmp -type f -exec chmod 777 {} \; [root@localhost oracle]# find /tmp -type f -exec ls -l {} \; -rwxrwxrwx. 1 root root 0 14 mai 21:32 /tmp/fichier2 -rwxrwxrwx. 1 root root 8 14 mai 21:51 /tmp/fichier1 ...
3- Enfin, pour supprimer les fichiers du répertoire /tmp, on aura le choix entre deux syntaxes :
[root@localhost oracle]# find /tmp -type f -exec rm -rf {} \;
[root@localhost oracle]# find /tmp -type f -delete;