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 :

[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;


Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Chargement...
Menu Title

Powered by themekiller.com