Sitedetout - Tutoriels informatiques

La commande find Linux

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 :

[[email protected] ~]# touch /tmp/fichier1
[[email protected] ~]# touch /tmp/fichier2
[[email protected] ~]# touch /tmp/testfichier1
[[email protected] ~]# find /tmp -name fichier1 /tmp/fichier1 
[[email protected] ~]# 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 :

[[email protected] ~]# find /tmp \( -name 'fich*' -o -name 'test*' \)
/tmp/fichier2
/tmp/testfichier1
/tmp/fichier1

3- Trouver tout les fichiers dans le répertoire /tmp :

[[email protected] ~]# 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).

[[email protected] ~]# 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 :

[[email protected] ~]# echo "contenu" > /tmp/fichier1 
[[email protected] ~]# 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

[[email protected] ~]# find /tmp -type f -size +0k
/tmp/fichier2

5- Cependant, pour trouver les fichiers vides, on utilisera l’option -empty :

[[email protected] ~]# 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 :

[[email protected] ~]# 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 :

[[email protected] ~]# 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 :

[[email protected] ~]# 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 :

[[email protected] ~]# 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).

[[email protected] ~]# 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.

[[email protected] 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 :

[[email protected] 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) :

[[email protected] oracle]# find /tmp -type f -exec chmod 777 {} \;
[[email protected] 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 :

[[email protected] oracle]# find /tmp -type f -exec rm -rf {} \;
[[email protected] oracle]# find /tmp -type f -delete;


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Chargement...

Powered by sitedetout.com