# Commande find sous Linux : rechercher et trouver des fichiers

[Linux](https://www.ionos.fr/digitalguide/serveur/know-how/linux-une-alternative-a-windows/ "Linux : une alternative à Windows") est un système d’exploitation open source qui a été créé comme une alternative gratuite à UNIX. Comme avec UNIX, la **ligne de commande est un outil fondamental lorsque vous travaillez avec Linux**. L’utilisateur entre les commandes dans une ligne de commande qui les exécute.

La commande find sous Linux est utilisée pour rechercher des fichiers. Elle lance une **recherche récursive** dans laquelle un ou plusieurs répertoires sont explorés selon certains critères. La commande find Linux est un outil précis pour rechercher fichiers et répertoires et est prise en charge sur presque toutes les distributions Linux.

---

### Conseil

Optez pour [l’hébergement Linux](https://www.ionos.fr/hebergement/hebergement-linux "Hébergement Linux IONOS") de IONOS, créez un lieu sûr pour vos projets Web.

---

## Aperçu de la commande find sous Linux

La commande find est déclenchée directement par le biais d’une ligne de commande dans le terminal ou la console. Voici la syntaxe générale de la commande find sous Linux :

```none
find <chemin> <option>
```

---

### Note

Attention : soyez prudent lors de l’entrée de commandes dans le terminal ou la console. L’exécution d’une mauvaise commande peut, dans certains cas, endommager votre système !

---

On trouve d’abord la commande elle-même, suivie du chemin d’accès au répertoire et d’un nombre variable d’options de recherche. Une option de recherche est composée d’un trait d’union immédiatement suivi du nom de l’option. Celui-ci est suivi d’un espace et de la valeur de l’option. Voici un aperçu des options de recherche les plus fréquemment utilisées :

<table>
  <tbody>
    <tr>
      <td><strong>Options</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>-name, -iname</td>
      <td>Recherche par nom de fichier</td>
    </tr>
    <tr>
      <td>-type</td>
      <td>Recherche par type de fichier</td>
    </tr>
    <tr>
      <td>-size, -empty</td>
      <td>Recherche par taille de fichier</td>
    </tr>
    <tr>
      <td>-ctime, -mtime, -atime</td>
      <td>Recherche par date de création, date de dernière modification ou date de dernier accès</td>
    </tr>
    <tr>
      <td>-user, -group</td>
      <td>Recherche par propriétaire ou par groupe</td>
    </tr>
    <tr>
      <td>-perm</td>
      <td>Recherche par autorisations d’accès</td>
    </tr>
  </tbody>
</table>

Plusieurs options de recherche peuvent être combinées. Une opération AND (et) est implicitement supposée lorsque plusieurs options sont utilisées. Elle peut également être écrite. De plus, un lien OR (ou) peut être utilisé et une condition peut être annulée :

<table>
  <tbody>
    <tr>
      <td><strong>Options</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>-and</td>
      <td>Les résultats de la recherche doivent remplir les deux conditions</td>
    </tr>
    <tr>
      <td>-or</td>
      <td>Les résultats de la recherche doivent correspondre à au moins l’une des deux conditions</td>
    </tr>
    <tr>
      <td>-not</td>
      <td>Ignore la condition suivante</td>
    </tr>
  </tbody>
</table>

Notez que dans les exemples de code suivants, vous devez remplacer les **&lt;termes génériques&gt; par des valeurs réelles** afin d’exécuter les exemples.

### Limiter la recherche à un répertoire spécifique

Voyons d’abord comment limiter la recherche à un répertoire spécifique. Pour **rechercher dans le répertoire courant**, on utilise le point « . » comme chemin d’accès au répertoire :

```none
find . <option>
```

Pour **rechercher dans son répertoire personnel,** on utilise le tilde « ~ » comme chemin d’accès au répertoire :

```none
find ~ <option>
```

Vous pouvez également rechercher l’ensemble du système à l’aide de find sous Linux. Cependant, en raison du grand nombre de fichiers et éventuellement de répertoires, cela peut prendre beaucoup de temps. Pour **rechercher dans tout le système**, on utilise la barre oblique « / » comme chemin d’accès au répertoire :

```none
find / <option>
```

---

### Note

Attention : soyez extrêmement prudent lorsque vous utilisez la commande find Linux en combinaison avec l’option « -exec » sur l’ensemble du système !

---

### Personnaliser les résultats de la recherche

Les résultats de recherche de la commande find Linux peuvent être très longs. Il est donc souvent utile de **paramétrer la présentation des résultats**. On n’utilise alors pas les options de la commande pour cela, mais ce que l’on appelle des « tubes » (ou « pipelines » ou « pipes »). Sous Linux, ceux-ci sont utilisés pour utiliser la sortie d’une commande comme entrée d’une autre commande.

Pour **afficher les résultats par page**, on transmet la sortie de la commande find à la commande less :

```none
find <chemin> <option> | less
```

Pour **compter le nombre de résultats**, on transmet la sortie de la commande find à la commande wc avec l’option « -l »:

```none
find <chemin> <option> | wc -l
```

Afin de ne **sortir que les premiers ou les derniers résultats de recherche**, on transmet la sortie de la commande find aux commandes « head » et « tail ». On entre le paramètre « -n » suivi du nombre de résultats de recherche souhaité :

```none
find <chemin> <option> | head -n <nombre>
```

```none
find <chemin> <option> | tail -n <nombre>
```

## Rechercher des fichiers sur Linux : cas d’utilisation simples

Les exemples suivants **limitent la recherche au répertoire courant et toute sa descendance**. Utilisez la commande cd sur la ligne de commande pour accéder à n’importe quel répertoire. Pour essayer simplement les exemples, accédez d’abord à votre dossier utilisateur :

```none
cd ~
```

### Filtrer par nom de fichier avec la commande find Linux

Pour filtrer par nom de fichier, utilisez l’option « -name ». Le nom de fichier doit être exact et la casse respectée :

```none
find . -name <fichier>
```

Ici, on recherche un fichier avec le nom exact « .gitignore » :

```none
find . -name .gitignore
```

Pour **ignorer la différence entre les majuscules et les minuscules**, on utilise l’option « -iname ». Le « i » signifie « insensible », pour « insensible à la casse », c’est à dire qui ne tient pas compte des majuscules et minuscules :

```none
find . -iname <fichier>
```

Il est généralement **plus pratique d**’**effectuer d**’**abord une recherche insensible à la casse** et de n’utiliser l’option « -name » que si la recherche avec « -iname » renvoie à trop de résultats.

Pour effectuer une recherche non pas à partir d’un nom de fichier exact mais une partie du nom seulement, on utilise **l**’**astérisque pour remplacer les parties manquantes** et on écrit la recherche entre guillemets. L’astérisque permet de remplacer tout texte manquant. Ici, on recherche des fichiers et des répertoires dont les noms contiennent le texte « git » :

```none
find . -iname "*git*"
```

### Filtrer par type de fichier à l’aide de la commande find Linux

Un aspect célèbre de la philosophie UNIX est le principe selon lequel « tout est un fichier ». C’est aussi valable sous Linux. Le terme « fichier » est défini de manière plus large que dans l’usage courant. Ainsi, les répertoires sont également considérés comme des fichiers sous Linux. Pour éviter toute confusion, le terme plus précis de « descripteur de fichier » est parfois utilisé.

Lorsqu’on parle de « type de fichier » sous Linux, il ne s’agit pas de faire la différence entre un fichier Excel ou une image JPEG. Il s’agit plutôt de distinguer les différents types de descripteurs de fichiers qui existent sous Linux. La commande Linux find fournit l’option de recherche « -type » pour filtrer les différents types de fichiers. On peut donc faire **la distinction entre les fichiers et les répertoires lors de la recherche**. Voici un aperçu des types de fichiers les plus couramment utilisés :

<table>
  <tbody>
    <tr>
      <td><strong>Types de fichier</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>f</td>
      <td>Fichier („file“)</td>
    </tr>
    <tr>
      <td>d</td>
      <td>Répertoire („directory“)</td>
    </tr>
    <tr>
      <td>l</td>
      <td>Lien symbolique („symlink“)</td>
    </tr>
  </tbody>
</table>

Pour **n**’**inclure que les fichiers dans les résultats de la recherche**, on utilise l’option « -type » suivie de la valeur « f »:

```none
find . -type f
```

Pour **n**’**inclure que les répertoires dans les résultats de la recherche**, on utilise l’option « -type » suivie de la valeur « d »:

```none
find . -type d
```

Pour **filtrer les extensions de fichiers**, on utilise l’option « -iname » et l’astérisque comme terme générique.

Pour trouver tous les fichiers avec l’extension jpeg ou JPEG :

```none
find . -type f -iname "*.jpeg"
```

Pour trouver tous les fichiers avec l’extension jpeg/JPEG ou jpg/JPG :

```none
find . -type f -iname "*.jpeg" -or -iname "*.jpg"
```

### Filtrer par taille à l’aide de find sous Linux

Un **fichier sous Linux contient plusieurs informations**. Cela comprend généralement au moins les éléments suivants :

- Le nom
- Le type de fichier
- La taille
- Les dates de création ou de dernière modification
- Le propriétaire ou le groupe
- Les droits d’accès

Tous ces éléments peuvent être filtrés avec la commande find et les options correspondantes. Pour **filtrer selon la taille d**’**un fichier**, on utilise l’option « -size » suivie d’une spécification de la taille.

La commande find suivante renvoie tous les fichiers d’une taille d’au moins 700 mégaoctets :

```none
find . -size +700M
```

---

### Note

Le filtrage par taille ne fonctionne que pour les fichiers. Aucune taille n’est stockée dans le système de fichiers pour les répertoires. À la place, la taille est calculée de manière récursive si nécessaire.

---

Les **informations sur la taille d**’**un fichier sont affichées avec un nombre suivi d**’**une unité**. Voici un aperçu des unités disponibles :

<table>
  <tbody>
    <tr>
      <td><strong>Unités</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>c</td>
      <td>Octets</td>
    </tr>
    <tr>
      <td>k</td>
      <td>Kilooctets</td>
    </tr>
    <tr>
      <td>M</td>
      <td>Mégaoctets</td>
    </tr>
    <tr>
      <td>G</td>
      <td>Gigaoctets</td>
    </tr>
    <tr>
      <td>b</td>
      <td>Blocs de 512 octets</td>
    </tr>
  </tbody>
</table>

Ces informations correspondent à la taille exacte du fichier. C’est peu pratique car la taille exacte du fichier recherché est souvent inconnue. **Rechercher selon un ordre de grandeur** fait plus sens. Pour cela, le numéro est précédé d’un signe modificateur :

<table>
  <tbody>
    <tr>
      <td><strong>Modificateurs</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>+</td>
      <td>Le fichier est plus grand que la taille spécifiée</td>
    </tr>
    <tr>
      <td>-</td>
      <td>Le fichier est plus petit que la taille spécifiée</td>
    </tr>
  </tbody>
</table>

La commande suivante renvoie des fichiers inférieurs à 500 mégaoctets :

```none
find . -size -500M
```

La commande suivante renvoie des fichiers d’une taille comprise entre 400 et 500 mégaoctets :

```none
find . -size +400M -and -size -500M
```

En plus de spécifier une taille exacte ou selon un ordre de grandeur, il est possible de **rechercher des fichiers vides** avec l’option « -empty » :

```none
find . -type f -empty
```

Cette option fonctionne **également pour les répertoires** :

```none
find . -type d -empty
```

### Filtrer par dates avec la commande Linux find

Le système d’exploitation gère le système de données et enregistre l’accès aux fichiers. Différentes informations sur les moments de création et de modification des fichiers sont enregistrées. Linux enregistre **les heures et dates de création, de la dernière modification et du dernier accès à un fichier**. Avec la commande find sous Linux, il est possible de filtrer ces informations. Voici un aperçu des options de recherche les plus fréquemment utilisées :

<table>
  <tbody>
    <tr>
      <td><strong>Options</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>-ctime, -cmin</td>
      <td>Filtrer par date de création („Creation“)</td>
    </tr>
    <tr>
      <td>-mtime, -mmin</td>
      <td>Filtrer par date de modification („Modification“)</td>
    </tr>
    <tr>
      <td>-atime, -amin</td>
      <td>Filtrer par date de dernier accès au fichier („Access“)</td>
    </tr>
  </tbody>
</table>

Pour trouver les fichiers qui ont été **modifiés il y a un jour**, on utilise l’option de recherche « -mtime », suivie de la valeur « 1 »:

```none
find . -type f -mtime 1
```

Les options de recherche contenant « **time** » correspondent au nombre de jours. Les options avec « **min** » indiquent un nombre de minutes.

De la même manière que le filtrage par taille de fichier, il est possible d’**indiquer un ordre de grandeur pour les dates**. Encore une fois, les signes plus et moins sont utilisés comme modificateurs :

<table>
  <tbody>
    <tr>
      <td><strong>Modificateurs</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>+</td>
      <td>La date renvoie à plus de jours que le chiffre indiqué</td>
    </tr>
    <tr>
      <td>-</td>
      <td>La date renvoie à moins de jours que le chiffre indiqué</td>
    </tr>
  </tbody>
</table>

Pour trouver les fichiers **créés il y a plus de 100 jours**, on utilise l’option de recherche « -ctime », suivie de la valeur « +100 » :

```none
find . -type f -ctime +100
```

Comme pour le filtrage par taille de fichier, les options de recherche peuvent être combinées pour couvrir une fourchette de dates. Pour trouver les fichiers qui ont été **consultés il y a trois à cinq jours**, on utilise l’option de recherche « -atime » deux fois, chacun avec les valeurs « +2 » et « -6 ». L’option « -and » est explicite et donc facultative :

```none
find . -type f -atime +2 -and -atime -6
```

Pour trouver les fichiers qui ont été **modifiés il y a moins de cinq minutes**, on utilise l’option de recherche « -mmin » avec la valeur « -5 » :

```none
find . -type f -mmin -5
```

### Filtrer par propriétaire, groupe et droits d’accès avec la commande Linux find

Sous Linux, **chaque fichier se voit attribuer un utilisateur propriétaire**. De plus, chaque fichier appartient à un groupe d’utilisateurs spécifique. Sur cette base, certaines autorisations sont définies pour chaque fichier. Il est possible de filtrer avec la commande find pour trouver des fichiers sous Linux selon toutes ces informations. Voici un aperçu des options de recherche utilisées :

<table>
  <tbody>
    <tr>
      <td><strong>Options</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>-user</td>
      <td>Filtrer par propriétaire</td>
    </tr>
    <tr>
      <td>-group</td>
      <td>Filtrer par groupe</td>
    </tr>
    <tr>
      <td>-perm</td>
      <td>Filtrer par droits d’accès</td>
    </tr>
  </tbody>
</table>

Pour rechercher des fichiers **appartenant à l**’**utilisateur root** (ou super utilisateur), on utilise l’option de recherche « -user » suivie de la valeur « root » :

```none
find . -user root
```

Pour rechercher des fichiers **appartenant à l’utilisateur** qui est en train de faire la recherche, on utilise l’option de recherche « -user » suivie de l’expression « $ (whoami) ». Ce terme générique correspond au nom de l’utilisateur connecté :

```none
find . -user $(whoami)
```

Pour rechercher des fichiers **appartenant au groupe administrateur**, on utilise l’option de recherche « -group » suivie de la valeur « admin » :

```none
find . -group admin
```

En plus du filtrage par propriétaire et par groupe, il est également possible de **filtrer par droits d**’**accès**. Une suite de trois nombres du système octal est utilisée. Les valeurs fréquemment utilisées sont « 644 », « 755 », etc. Le premier nombre définit les droits d’accès pour le propriétaire, le second pour le groupe et le troisième pour les autres utilisateurs. Chacun des trois nombres octaux est généré en ajoutant les droits individuels. Nous expliquons exactement comment cela fonctionne dans notre article sur l’[attribution des droits sur un répertoire avec chmod](https://www.ionos.fr/digitalguide/serveur/know-how/attribution-de-droits-sur-un-repertoire-avec-chmod/ "Attribution de droits sur un répertoire avec chmod").

Pour trouver des fichiers **entièrement accessibles à n**’**importe quel utilisateur**, on utilise l’option de recherche « -perm » suivie de la valeur « 777 » :

```none
find . -perm 777
```

Pour trouver des fichiers qui ne sont **entièrement accessibles qu**’**au propriétaire**, on utilise l’option de recherche « -perm » suivie de la valeur « 700 »:

```none
find . -perm 700
```

Il est également possible d’utiliser la commande find sous Linux pour rechercher des fichiers qui ont **au moins certaines autorisations spécifiées**. Pour ce faire, on met immédiatement un signe moins devant le nombre octal :

```none
find . -perm -007
```

### Limiter la profondeur de récursivité de la commande Linux find

Normalement, la commande Linux find parcourt tous les sous-répertoires de manière récursive. Cependant, il peut être utile de **limiter la profondeur de la récursivité**. Pour ce faire, on utilise les options de recherche « -maxdepth » et « -mindepth » :

<table>
  <tbody>
    <tr>
      <td><strong>Options</strong></td>
      <td><strong>Significations</strong></td>
    </tr>
    <tr>
      <td>-maxdepth</td>
      <td>Profondeur de récursivité maximale</td>
    </tr>
    <tr>
      <td>-mindepth</td>
      <td>Profondeur de récursivité minimale</td>
    </tr>
  </tbody>
</table>

Pour rechercher des fichiers d’une taille supérieure à 50 mégaoctets et n’incluant que des répertoires qui ne sont pas à plus de deux niveaux sous le répertoire actuel, on utilise la commande suivante :

```none
find . -type f -maxdepth 2 -size +50M
```

Pour rechercher des fichiers d’une taille supérieure à 50 mégaoctets et n’incluant que des répertoires entre trois et cinq niveaux inférieurs au répertoire actuel, on utilise la commande suivante :

```none
find . -type f -mindepth 3 -and -maxdepth 5 -size +50M
```

## Rechercher et traiter des fichiers avec la commande Linux find

Jusqu’à présent, nous nous sommes limités à la recherche de fichiers sous Linux. Cependant, de nombreux cas d’utilisation nécessitent un **traitement massif des fichiers trouvés**. C’est le cas pour la réparation des droits d’accès sur des logiciels comme WordPress ou la suppression de fichiers après un piratage. On utilise également la commande find pour ces cas d’utilisation.

Considérons le **modèle général pour exécuter une commande pour chaque fichier trouvé**. On utilise l’option « -exec », suivie d’une commande Linux et de ses options. La commande entière est complétée par le texte « {} \\; », qui reste toujours le même :

```none
find <chemin> <option> -exec <commande_et_options> {} \;
```

Notez que la **commande est exécutée sans requête**. En fonction des options de recherche sélectionnées et de la commande donnée, l’exécution de la commande find avec l’option « -exec » peut endommager sérieusement le système.

Afin de limiter les risques, on peut utiliser l’option « -ok », similaire à l’option « -exec ». Elle **oblige l’utilisateur à confirmer la modification** de chaque fichier trouvé :

```none
find <chemin> <option> -ok <commande_et_options> {} \;
```

Par précaution, nous limitons dans les exemples suivants la profondeur de récursivité à un seul sous-répertoire en utilisant « -maxdepth 1 ».

---

### Note

Attention : soyez prudent avec les exemples suivants. Nous vous recommandons fortement de créer un dossier spécifique pour les essayer. Avant d’exécuter les exemples, accédez à ce dossier pour vous assurer de ne pas endommager le système !

---

### Modifier le propriétaire et le groupe avec la commande Linux find

Pour définir le propriétaire et le groupe de tous les fichiers et répertoires sur la valeur « www-data », on utilise la commande find suivante avec la **commande chown** :

```none
find . -maxdepth 1 -exec chown www-data:www-data {} \;
```

### Modifier les autorisations des fichiers avec la commande Linux find

Pour rechercher des fichiers avec les droits d’accès « 777 » et les changer en « 664 », on utilise la commande find suivante avec la **commande chmod** :

```none
find . -type f -maxdepth 1 -perm 777 -exec chmod 664 {} \;
```

Pour changer les droits de tous les répertoires en « 755 », on utilise la commande find suivante avec la commande chmod :

```none
find . -type d -maxdepth 1 -exec chmod 755 {} \;
```

### Utiliser la commande Linux find pour supprimer les répertoires et fichiers vides

Il est également possible d’utiliser la commande find pour **supprimer les fichiers et répertoires trouvés**. Par précaution, nous ne montrons cette possibilité ici que pour les fichiers et répertoires vides. De plus, au lieu du paramètre « -exec », on utilise le paramètre « -ok » pour obliger l’utilisateur à consentir explicitement à la suppression.

Pour [supprimer les répertoires vides sous Linux](https://www.ionos.fr/digitalguide/serveur/configuration/supprimer-un-repertoire-sous-linux/ "Supprimer un répertoire sous Linux"), on utilise la commande find suivante avec la **commande rmdir** :

```none
find . -type d -maxdepth 1 -empty -ok rmdir {} \;
```

Pour [supprimer les fichiers vides sous Linux](https://www.ionos.fr/digitalguide/serveur/configuration/supprimer-un-fichier-linux/ "Supprimer un fichier Linux"), on utilise la commande find suivante avec la **commande rm** :

```none
find . -type f -maxdepth 1 -empty -ok rm {} \;
```


This is a markdown version of: [https://www.ionos.fr/digitalguide/serveur/configuration/commande-find-sous-linux/](https://www.ionos.fr/digitalguide/serveur/configuration/commande-find-sous-linux/) for AI/LLM consumption.