Comment trouver un répertoire dans Linux depuis la ligne de commande
Vous avez déjà égaré un dossier sur votre ordinateur Linux ? Ne vous inquiétez pas ! Linux offre des outils puissants en ligne de commande pour localiser ces répertoires manquants. L'un des plus polyvalents est la commande find, qui vous permet de rechercher des répertoires en fonction de divers critères. Dans ce guide, nous couvrirons plusieurs façons de trouver un répertoire sur votre système Linux.
Tout d'abord, nous vous montrerons comment rechercher des répertoires par nom. Ensuite, nous vous montrerons comment trouver des répertoires récemment modifiés et des répertoires modifiés au cours des N derniers jours. Vous apprendrez également à identifier les répertoires plus anciens - ceux modifiés il y a plus de N jours.
Ensuite, nous aborderons la recherche de répertoires dans une plage de profondeur spécifiée en utilisant les options maxdepth et mindepth. Vous verrez comment trouver des répertoires en fonction de leurs permissions, ainsi que des répertoires contenant un nombre spécifique de fichiers.
Enfin, nous expliquerons comment rechercher des répertoires vides, ce qui peut être utile pour identifier les parties inutilisées ou superflues de votre système de fichiers.
Tout au long du guide, nous fournirons des exemples pratiques pour vous aider à tirer le meilleur parti de la commande find lorsque vous travaillez avec des répertoires sous Linux.
Rechercher par nom de répertoire
Si vous connaissez le nom du répertoire et où commencer la recherche, utilisez cette commande :
find /path/to/search -type d -name "directory_name"Remplacez /path/to/search par le chemin réel et "directory_name" par le répertoire cible.
Exemple:
$ find ~/ -type d -name "Documents"Cette commande recherche des répertoires portant le nom « Documents » à partir du répertoire personnel de l'utilisateur (~/).
Voici une répartition de la commande :
find ~/: Cela démarre la recherche à partir du répertoire personnel de l'utilisateur (~/).-type d: Cela indique àfindde rechercher des répertoires (-type d) au lieu de fichiers ordinaires.-name "Documents": Cette option indique àfindde rechercher des répertoires portant le nom "Documents". Les guillemets autour de "Documents" garantissent que la recherche concerne le nom exact, et non seulement les répertoires contenant le mot "Documents".
Ainsi, cette commande recherchera dans le répertoire personnel de l'utilisateur et tous ses sous-répertoires tous les répertoires nommés "Documents". Si certains sont trouvés, elle affichera le chemin complet de ces répertoires.
Rechercher des répertoires dans le répertoire actuel
Si vous voulez commencer la recherche à partir du répertoire courant plutôt que du répertoire personnel (~/), vous pouvez simplement omettre la partie ~/ de la commande, comme ceci :
$ find . -type d -name "Documents"Voici le détail de ce que fait chaque option :
find .: Le.représente le répertoire actuel, donc la recherche commencera à partir du répertoire de travail actuel.-type d: Cela indique àfindde rechercher des répertoires.-name "Documents": Cette option indique àfindde rechercher des répertoires portant le nom « Documents ».
La commande recherchera dans le répertoire actuel et tous ses sous-répertoires tous les répertoires nommés "Documents" et affichera les chemins complets de ces répertoires.
Alternativement, vous pouvez également utiliser la variable $PWD, qui représente le répertoire de travail actuel, comme ceci :
$ find $PWD -type d -name "Documents"
Les deux commandes permettront d'obtenir le même résultat, en commençant la recherche à partir du répertoire actuel.
Utilisation de -iname pour ignorer la casse
C'est un drapeau assez utile dans la commande find.
Nous pouvons utiliser l'option -iname au lieu de -name pour rendre la recherche insensible à la casse.
Voici l'exemple utilisant -iname au lieu de -name :
$ find . -type d -iname "Documents"L'option -iname "Documents" correspondra aux répertoires dont les noms sont comme "Documents", "documents", "DOCUMENTS", etc. Cela peut être utile si vous n'êtes pas sûr de la capitalisation exacte du nom du répertoire.
Les principales différences entre -name et -iname sont :
-nameeffectue une recherche sensible à la casse, donc il ne correspondra qu’aux répertoires ayant exactement la même capitalisation que le motif fourni.-inameeffectue une recherche insensible à la casse, donc il correspondra aux répertoires indépendamment de leur capitalisation.
Vous pouvez également inclure le terme de recherche à l'intérieur du caractère générique comme ceci :
$ find . -type d -iname "*documents*"Cette commande listera tous les répertoires dans le répertoire actuel (et ses sous-répertoires) qui ont « documents » dans leurs noms.
Utiliser -iname peut être plus pratique dans les situations où vous ne connaissez pas ou ne vous souciez pas de la casse exacte du nom du répertoire que vous recherchez.
Personnellement, je préfère utiliser l'option -iname avec la commande find lorsque je recherche quelque chose.
Rechercher à la fois des répertoires et des fichiers
Si vous supprimez la partie -type d de la commande find, elle recherchera à la fois les fichiers et les répertoires qui correspondent aux autres critères, comme l'option -name ou -iname.
La commande ressemblerait à ceci :
$ find . -iname "Documents"Voici ce qui se passerait :
- La commande
findrecherchera dans le répertoire courant (.) et tous ses sous-répertoires tous les éléments (fichiers et répertoires) portant le nom « Documents » (sans distinction entre majuscules et minuscules). - Il inclura à la fois les répertoires nommés « Documents » et tous les fichiers réguliers nommés « Documents » dans les résultats.
Donc, le résultat de cette commande inclurait :
- Tous les répertoires nommés « Documents », « documents », « DOCUMENTS », etc.
- Tout fichier régulier nommé "Documents", "documents", "DOCUMENTS", etc.
Supprimer la partie -type d rend la recherche plus large, car elle inclura à la fois les répertoires et les fichiers correspondant au motif de nom spécifié.
Cela peut être utile si vous n'êtes pas sûr que l'entrée « Documents » que vous recherchez soit un répertoire ou un fichier, et que vous souhaitez en trouver toutes les occurrences.
Cependant, si vous recherchez spécifiquement des répertoires nommés « Documents », il est préférable de conserver l'option -type d pour restreindre la recherche.
Trouver les répertoires récemment modifiés
Pour lister les répertoires modifiés sur une plage de dates spécifique, utilisez -newermt deux fois.
Par exemple, pour rechercher des répertoires qui ont été créés ou modifiés entre le 15 mars 2024 et le 15 avril 2024 (exclus), vous pouvez utiliser :
$ find /path/to/search -type d -newermt "2024-03-15" ! -newermt "2024-04-15"Voici une répartition de la commande ci-dessus :
find /path/to/search: Cela indique à la commandefindde commencer la recherche à partir du répertoire/path/to/search.-type d: Cette option garantit que la commandefindrecherche uniquement des répertoires, et non des fichiers ordinaires.-newermt "2024-03-15": Cette option indique àfindd'inclure uniquement les répertoires qui sont plus récents (créés ou modifiés) que le 15 mars 2024.! -newermt "2024-04-15": Le symbole!nie la condition, donc cette partie indique àfindd'exclure les répertoires qui sont plus récents que le 15 avril 2024.
La combinaison de ces options entraîne find à rechercher des répertoires qui ont été créés ou modifiés le 15 mars 2024 ou après, mais avant le 15 avril 2024.
Cela peut être utile, par exemple, si vous souhaitez trouver tous les répertoires qui ont été créés ou modifiés pendant une période de temps spécifique, par exemple pour des sauvegardes ou des audits.
Localiser les répertoires modifiés au cours des N derniers jours
Pour trouver des répertoires modifiés au cours des n derniers jours, utilisez -mtime.
La commande suivante recherchera les répertoires sous le répertoire ~/Projects/ qui ont été modifiés au cours des 7 derniers jours.
$ find ~/Projects/ -type d -mtime -7Voici ce que fait chaque partie dans la commande :
find ~/Projects/: Cela indique à la commandefindde commencer la recherche à partir du répertoire~/Projects/.-type d: Cette option garantit que la commandefindne recherche que des répertoires, pas des fichiers ordinaires.-mtime -7: Cette option indique àfindd'inclure uniquement les répertoires qui ont été modifiés (le « m » dans « -mtime » signifie « temps de modification ») au cours des 7 derniers jours.
La partie -mtime -7 fonctionne comme suit :
- Le signe
-indique « moins que » ou « au cours des derniers ». - Le nombre
7représente le nombre de jours.
Cela peut être utile, par exemple, si vous souhaitez trouver tous les nouveaux répertoires qui ont été créés ou mis à jour récemment dans votre répertoire ~/Projects/, peut-être pour des raisons de sauvegarde ou de suivi.
Identifier les anciens répertoires
Pour trouver des répertoires modifiés il y a plus de N jours (c'est-à-dire (trouver des répertoires âgés de plus de N jours), utilisez -mtime avec un signe plus.
Par exemple, la commande suivante recherchera des répertoires sous le répertoire ~/Projects/ qui ont été modifiés il y a plus de 7 jours.
$ find ~/Projects/ -type d -mtime +7En d'autres termes, il trouvera les répertoires qui n'ont pas été modifiés (créés, mis à jour ou consultés) au cours des 7 derniers jours.
L'option -mtime +7 indique à find d'inclure uniquement les répertoires dont le temps de modification (« m » dans « -mtime ») est supérieur à il y a 7 jours.
Ainsi, cette commande est utile pour trouver des répertoires qui n'ont pas été consultés ou modifiés pendant une certaine période, ce qui pourrait être utile pour des tâches comme l'identification de répertoires inutilisés ou obsolètes, ou pour effectuer la maintenance/le nettoyage de la structure de répertoires de votre projet.
Comment savons-nous si les répertoires ont vraiment été modifiés il y a plus de X jours ? Simple.
Pour vérifier si les répertoires trouvés par la commande find ont été modifiés il y a plus de 7 jours, vous pouvez utiliser la commande stat pour afficher le temps de modification de chaque répertoire.
$ find ~/Projects/ -type d -mtime +7 -exec stat -c '%n %y' {} \;Voici l'explication de la commande ci-dessus :
find ~/Projects/ -type d -mtime +7: Cette partie de la commande est la même qu'auparavant, elle permet de trouver les répertoires datant de plus de 7 jours.-exec stat -c '%n %y' {} \;: Cette partie utilise l'option-execdefindpour exécuter la commandestatsur chaque répertoire trouvé.
stat -c '%n %y': La commandestataffiche le nom du fichier (%n) et l'heure de la dernière modification (%y) du répertoire.{}: Il s'agit d'un espace réservé qui est remplacé par le répertoire actuel trouvé parfind.\;: Cela termine la commande-exec.
Lorsque vous exécutez cette commande, elle affichera le chemin et la dernière date de modification de chaque répertoire ayant plus de 7 jours. Cela vous permet de vérifier que les répertoires trouvés ont effectivement été modifiés il y a plus de 7 jours.
Voici un exemple de la sortie :
/home/ostechnix/Projects/Python 2024-03-22 14:18:14.958042173 +0530
/home/ostechnix/Projects/Vim 2024-03-22 14:05:55.887041168 +0530L'heure de modification affichée dans la sortie vous aidera à confirmer que les répertoires ont en effet plus de 7 jours, comme requis par la commande originale find.
Connexe : Comment trouver et supprimer des fichiers plus anciens que X jours sous Linux
Rechercher des annuaires dans la plage spécifiée
Nous pouvons rechercher des répertoires dans une plage de profondeur spécifiée en utilisant les options maxdepth et mindepth de la commande find.
Voici la syntaxe :
find /path/to/search -mindepth X -maxdepth Y -type dLaissez-moi expliquer ce que fait chaque option dans cette commande :
find /path/to/search: Cela indique à la commandefindde commencer la recherche à partir du répertoire/path/to/search.-mindepth X: Cette option définit le niveau de profondeur minimum des répertoires à inclure dans les résultats de recherche. La valeurXreprésente le nombre minimum de niveaux de répertoires à partir du point de départ.-maxdepth Y: Cette option définit le niveau de profondeur maximal pour les répertoires à inclure dans les résultats de recherche. La valeurYreprésente le nombre maximum de niveaux de répertoire à partir du point de départ.-type d: Cette option garantit que la commandefindne recherche que des répertoires, pas des fichiers ordinaires.
Veuillez noter que l'option
-mindepthdoit être spécifiée avant les autres arguments, y compris-type.
Par exemple, pour rechercher des répertoires qui sont au moins à 2 niveaux de profondeur mais pas plus de 4 niveaux de profondeur dans le répertoire /Projects, vous utiliseriez la commande suivante :
$ find ~/Projects -mindepth 2 -maxdepth 4 -type dCette commande recherchera des répertoires qui sont entre 2 et 4 niveaux de profondeur (inclus) par rapport au répertoire /Projects.
Vous pouvez ajuster les valeurs de X et Y en fonction de vos besoins spécifiques. Par exemple, si vous voulez rechercher des répertoires qui ont exactement 3 niveaux de profondeur, vous pouvez utiliser :
$ find ~/Projects -mindepth 3 -maxdepth 3 -type dCela n'inclura que les répertoires qui sont à trois niveaux de profondeur dans les résultats de recherche.
Utiliser maxdepth et mindepth ensemble peut être utile lorsque vous souhaitez limiter votre recherche à une plage spécifique de profondeurs de répertoires, ce qui peut être utile pour organiser et gérer votre système de fichiers.
Plus de détails sur maxdepth et mindepth peuvent être trouvés dans le lien suivant :
Comment utiliser les options maxdepth et mindepth avec la commande find de Linux
Trouver un répertoire en fonction de ses permissions
Pour trouver des répertoires en fonction de leurs permissions, vous pouvez utiliser la commande find avec l'option -perm.
find /path/to/search -type d -perm <permission_specification>Remplacez /path/to/search par le répertoire où vous voulez commencer la recherche, et <permission_specification> par la permission souhaitée. Vous pouvez spécifier la permission en utilisant la notation octale.
Permettez-moi de vous montrer quelques exemples.
Pour trouver tous les répertoires dans le répertoire courant avec la permission 755 (c'est-à-dire rwx pour le propriétaire et rx pour le groupe et les autres) :
$ find . -type d -perm 755Pour trouver des répertoires avec la permission rwx pour le propriétaire, r-x pour le groupe, et aucune permission pour les autres :
$ find . -type d -perm 750Pour trouver tous les répertoires dans ~/Projects avec n'importe quelle permission pour le propriétaire et r-x pour le groupe et les autres :
$ find ~/Projects~ -type d -perm -005Vous pouvez ajuster le <permission_specification> en fonction de vos besoins spécifiques. De plus, vous pouvez utiliser les options -maxdepth et -mindepth pour contrôler la profondeur de la recherche si nécessaire.
Trouver des répertoires contenant un nombre spécifique de fichiers
Pour trouver des répertoires contenant un nombre spécifique de fichiers, vous pouvez utiliser une combinaison des commandes find, wc et bash.
Exemple:
La commande suivante trouve tous les répertoires dans le répertoire actuel et ses sous-répertoires qui contiennent exactement 4 fichiers, et affiche le chemin complet de ces répertoires.
$ find . -type d -exec bash -c 'if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi' _ {} \;Décomposons la commande étape par étape :
find . -type d: Cela démarre la recherche de répertoires (pas de fichiers) à partir du répertoire courant (.).-exec bash -c '...' _ {} \;: Cette partie utilise l'optionexecdefindpour exécuter un script Bash personnalisé pour chaque répertoire trouvé.if [ $ (find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi: C'est le script Bash personnalisé qui est exécuté pour chaque répertoire.
$ (find "$1" -maxdepth 1 -type f | wc -l): Cette partie compte le nombre de fichiers (pas les répertoires) dans le répertoire actuel ("$1"). L'option-maxdepth 1garantit qu'elle ne compte que les fichiers dans le répertoire actuel, pas dans les sous-répertoires.[ ... -eq 4 ]: Cela vérifie si le nombre de fichiers dans le répertoire actuel est exactement 4.then echo "$1"; fi: Si la condition est vraie (le répertoire contient exactement 4 fichiers), le chemin complet du répertoire est affiché.
Cela peut être utile, par exemple, si vous avez un ensemble spécifique de répertoires qui devraient contenir un certain nombre de fichiers, et que vous voulez identifier rapidement les répertoires qui ne répondent pas à ce critère.
Rechercher des répertoires vides
Pour localiser les répertoires vides, utilisez l'option -empty :
find /path/to/search -type d -emptyPar exemple, pour rechercher des répertoires vides dans le répertoire « Work », exécutez :
$ find ~/Work/ -type d -emptyN'oubliez pas d'ajuster les chemins si nécessaire.
Conclusion
Dans ce guide, vous avez appris plusieurs techniques pour utiliser la commande find afin de rechercher des répertoires dans votre système Linux.
Vous pouvez rechercher par nom, par date de dernière modification ou par nombre de fichiers qu'il contient. Vous pouvez même trouver des dossiers vides ou ceux avec des autorisations spécifiques.
En comprenant comment utiliser des options comme maxdepth, mindepth et size, vous pouvez affiner vos recherches pour vous concentrer sur les répertoires spécifiques dont vous avez besoin.
Alors la prochaine fois qu'un dossier disparaît, ne paniquez pas ! Utilisez ces commandes find pour le localiser et garder vos fichiers organisés.
Lecture liée :
- Fd : L'alternative à la commande Find pour maîtriser la recherche de fichiers sous Linux
- Comment trouver la taille d'un répertoire sous Linux
- 15 commandes Linux essentielles que tout débutant devrait connaître