Recherche de fichiers Linux

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce labo (atelier), vous apprendrez à rechercher efficacement des fichiers dans un système Linux en utilisant la puissante commande find. La commande find est un outil polyvalent qui vous permet de rechercher des fichiers et des répertoires en fonction de divers critères tels que le nom, la taille, la date de modification, etc.

À la fin de ce labo, vous serez en mesure de :

  • Utiliser la syntaxe de base de la commande find
  • Rechercher des fichiers par noms spécifiques
  • Trouver des fichiers en fonction de leur taille
  • Combiner plusieurs critères de recherche

Ces compétences sont essentielles pour les administrateurs de systèmes, les développeurs et toute personne travaillant avec des systèmes Linux qui a besoin de localiser efficacement des fichiers dans le système de fichiers.

Exploration des bases de la commande find

La commande find est un outil puissant sous Linux qui vous aide à rechercher des fichiers et des répertoires dans un emplacement spécifié. La syntaxe de base de la commande find est la suivante :

find [point de départ] [options] [expression]

Où :

  • [point de départ] est le répertoire à partir duquel find doit commencer la recherche
  • [options] contrôlent la manière dont la recherche est effectuée
  • [expression] définit les critères de sélection des fichiers

Créons une structure de répertoires pour pratiquer. Ouvrez votre terminal et exécutez les commandes suivantes :

mkdir -p ~/project/files/{documents,images,music}
touch ~/project/files/documents/{report.txt,notes.txt,project.pdf}
touch ~/project/files/images/{photo1.jpg,photo2.jpg,diagram.png}
touch ~/project/files/music/{song1.mp3,song2.mp3}

Ces commandes créent une structure de répertoires avec plusieurs sous-répertoires et des fichiers de différents types.

Maintenant, utilisons la commande find pour lister tous les fichiers dans le répertoire files :

find ~/project/files -type f

Vous devriez voir une sortie similaire à :

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/project.pdf
/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg
/home/labex/project/files/images/diagram.png
/home/labex/project/files/music/song1.mp3
/home/labex/project/files/music/song2.mp3

Dans cette commande :

  • ~/project/files spécifie l'emplacement de départ de la recherche
  • -type f indique à find de ne rechercher que des fichiers (pas des répertoires)

Vous pouvez également utiliser find pour lister uniquement les répertoires :

find ~/project/files -type d

Cela affichera :

/home/labex/project/files
/home/labex/project/files/documents
/home/labex/project/files/images
/home/labex/project/files/music

L'option -type d indique à find de ne rechercher que des répertoires.

Recherche de fichiers par nom

L'une des utilisations les plus courantes de la commande find est de rechercher des fichiers par leur nom. L'option -name vous permet de spécifier un modèle à comparer avec les noms de fichiers.

Supposons que vous souhaitiez trouver tous les fichiers texte dans le répertoire files. Vous pouvez utiliser :

find ~/project/files -type f -name "*.txt"

Cette commande devrait retourner :

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt

Dans cette commande :

  • -name "*.txt" indique à find de rechercher les noms de fichiers se terminant par .txt
  • Le caractère * est un joker qui correspond à n'importe quel nombre de caractères

L'option -name respecte la casse. Si vous souhaitez rechercher des fichiers sans tenir compte de la casse, utilisez -iname à la place :

find ~/project/files -type f -iname "*.TXT"

Cela trouvera toujours report.txt et notes.txt même si nous avons spécifié l'extension en majuscules.

Maintenant, essayons de trouver un fichier spécifique. Créons un nouveau fichier avec un nom unique :

touch ~/project/files/documents/important_report.txt

Pour trouver ce fichier spécifique :

find ~/project/files -type f -name "important_report.txt"

Sortie :

/home/labex/project/files/documents/important_report.txt

Vous pouvez également effectuer une recherche dans des sous-répertoires spécifiques. Par exemple, pour rechercher uniquement dans le répertoire images :

find ~/project/files/images -type f -name "*.jpg"

Sortie :

/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg

Cette commande effectue une recherche uniquement dans le répertoire images pour les fichiers ayant l'extension .jpg.

Recherche de fichiers par taille

La commande find peut également rechercher des fichiers en fonction de leur taille en utilisant l'option -size. Cela est utile lorsque vous avez besoin de trouver des fichiers volumineux qui peuvent occuper de l'espace disque ou des fichiers de petite taille qui peuvent être vides.

Tout d'abord, comprenons la syntaxe de l'option -size :

-size n[cwbkMG]

Où :

  • n est un nombre
  • Les lettres représentent les unités : c (octets), w (mots de 2 octets), b (blocs de 512 octets), k (kilooctets), M (mégaoctets), G (gigaoctets)
  • Préfixer n avec + signifie "supérieur à n", et - signifie "inférieur à n"

Ajoutons du contenu à nos fichiers pour leur donner des tailles différentes :

echo "This is a short text file." > ~/project/files/documents/notes.txt
for i in {1..100}; do
  echo "This is line $i of the important report." >> ~/project/files/documents/important_report.txt
done

Maintenant, trouvons les fichiers de moins de 100 octets :

find ~/project/files -type f -size -100c

Cela peut inclure certains de nos fichiers vides ou presque vides.

Pour trouver les fichiers de plus d'1 kilooctet :

find ~/project/files -type f -size +1k

Cela devrait inclure notre fichier important_report.txt car nous y avons ajouté 100 lignes.

Vous pouvez également spécifier une taille exacte. Créons un fichier de exactement 50 octets :

echo -n "This is exactly 50 bytes long........................." > ~/project/files/documents/exact_size.txt

Maintenant, trouvons les fichiers de exactement 50 octets :

find ~/project/files -type f -size 50c

Sortie :

/home/labex/project/files/documents/exact_size.txt

Pour vérifier la taille du fichier, vous pouvez utiliser la commande ls -l :

ls -l ~/project/files/documents/exact_size.txt

La deuxième colonne de la sortie affiche la taille du fichier en octets, qui devrait être 50.

Combinaison de plusieurs critères de recherche

La commande find devient encore plus puissante lorsque vous combinez plusieurs critères de recherche. Vous pouvez utiliser des opérateurs logiques pour créer des modèles de recherche complexes.

Utilisation de la logique ET

Par défaut, lorsque vous spécifiez plusieurs critères, find utilise la logique ET, ce qui signifie que toutes les conditions doivent être vraies. Par exemple, pour trouver tous les fichiers texte de plus de 100 octets :

find ~/project/files -type f -name "*.txt" -size +100c

Cette commande trouve les fichiers qui sont à la fois des fichiers texte ET de plus de 100 octets.

Utilisation de la logique OU avec -o

Pour utiliser la logique OU, vous pouvez utiliser l'option -o. Par exemple, pour trouver les fichiers qui sont soit des fichiers texte, soit des fichiers PDF :

find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)

Notez l'utilisation des parenthèses, qui doivent être échappées avec des antislashs. Cette commande trouve les fichiers qui correspondent à l'une ou l'autre des conditions.

La sortie devrait inclure :

/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/important_report.txt
/home/labex/project/files/documents/exact_size.txt
/home/labex/project/files/documents/project.pdf

Utilisation de la logique NON avec

Pour nier une condition, utilisez l'opérateur !. Par exemple, pour trouver tous les fichiers qui ne sont pas des fichiers texte :

find ~/project/files -type f ! -name "*.txt"

Cette commande trouve tous les fichiers qui n'ont PAS l'extension .txt.

Exemples complexes

Essayons quelques combinaisons plus complexes. Par exemple, pour trouver tous les fichiers qui sont :

  • Soit des images JPG, soit des images PNG ET
  • De plus de 0 octet
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c

Pour trouver tous les fichiers dans le répertoire documents qui ne sont pas des fichiers PDF :

find ~/project/files/documents -type f ! -name "*.pdf"

Créons quelques fichiers supplémentaires pour démontrer une recherche plus complexe :

## Create some large and small image files
echo "This is a large JPG file" > ~/project/files/images/large_image.jpg
for i in {1..50}; do
  echo "Adding content to make this file larger." >> ~/project/files/images/large_image.jpg
done

touch ~/project/files/images/empty_image.png

Maintenant, trouvons toutes les images (JPG ou PNG) qui sont soit vides, soit de plus de 1 Ko :

find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)

Cette commande complexe montre comment vous pouvez créer des critères de recherche sophistiqués en combinant plusieurs conditions avec des opérateurs logiques.

Résumé

Dans ce laboratoire (lab), vous avez appris à utiliser la commande Linux find pour rechercher efficacement des fichiers en fonction de divers critères. Voici un récapitulatif de ce que vous avez accompli :

  1. Vous avez appris la syntaxe de base de la commande find et comment rechercher des fichiers et des répertoires.
  2. Vous avez découvert comment trouver des fichiers par nom en utilisant l'option -name et les caractères génériques (wildcards).
  3. Vous avez exploré comment rechercher des fichiers en fonction de leur taille en utilisant l'option -size avec différentes unités.
  4. Vous avez combiné plusieurs critères de recherche en utilisant des opérateurs logiques (ET, OU, NON) pour effectuer des recherches complexes.

La commande find est l'un des outils les plus puissants et les plus flexibles disponibles sous Linux pour localiser des fichiers. Au fur et à mesure que vous continuerez à travailler avec des systèmes Linux, vous trouverez ces compétences inestimables pour gérer les fichiers, résoudre les problèmes et automatiser les tâches.

Points clés à retenir :

  • Utilisez -type f pour les fichiers et -type d pour les répertoires.
  • Utilisez -name pour des recherches de noms de fichiers sensibles à la casse et -iname pour des recherches insensibles à la casse.
  • Utilisez -size avec les unités appropriées (c, k, M, G) pour trouver des fichiers par taille.
  • Combinez les critères avec des opérateurs logiques pour créer des modèles de recherche complexes.

Ces compétences vous aideront à naviguer et à gérer efficacement les fichiers dans n'importe quel environnement Linux.