Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
linux:find [24-06-2013 15:55] edmc73 |
linux:find [21-01-2025 10:50] (Version actuelle) edmc73 |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Find ====== | ====== Find ====== | ||
+ | |||
+ | ===== Commande utile ===== | ||
+ | |||
+ | Permet d' | ||
+ | find -mtime -1 -type f -exec ls -sh {} \; | sort -hr | ||
+ | |||
+ | Dans la vie de tous les jours, on cherche un fichier avec un morceau de nom sans savoir si il y a des majuscules ou non | ||
+ | find / | ||
+ | |||
+ | En installant le paquet **mlocate** (variante améliorée de l' | ||
+ | locate compta | ||
+ | |||
+ | A la différence de **find** qui fait une recherche en temps réel, **locate** se met à jour une fois par jour via la commande **updatedb** | ||
+ | |||
+ | __ Purger ses vieux fichiers de plus de 10 jours qui commence par ' | ||
+ | |||
+ | Vérifier avant de supprimer | ||
+ | find / | ||
+ | |||
+ | Ajouter simplement **-delete** pour supprimer | ||
+ | find / | ||
+ | |||
+ | Un autre exemple pour supprimer tous les liens symboliques à supprimer dans des répertoires en se limitant à une recherche dans 2 sous-dossiers | ||
+ | find daily.* -maxdepth 2 -type l -delete | ||
+ | |||
+ | Autre exemple de filtre avec -wholename | ||
+ | find . -wholename ' | ||
+ | |||
+ | |||
+ | Pour les anciennes version | ||
+ | |||
+ | Vérifier avant de supprimer | ||
+ | find / | ||
+ | Passer à l' | ||
+ | find / | ||
+ | |||
+ | |||
+ | |||
===== Utilisation de la commande find ===== | ===== Utilisation de la commande find ===== | ||
Ligne 6: | Ligne 44: | ||
La commande find permet de chercher des fichiers, et eventuellement d' | La commande find permet de chercher des fichiers, et eventuellement d' | ||
- | find . -print | + | find . | less |
- | affiche la liste de tous les fichiers du répertoire courant | + | affiche la liste de tous les fichiers du répertoire courant. On peut rediriger les messages d' |
- | find . -print | + | find . 2> /dev/null | less |
ou les inclures (on rassemble alors en un seul canal la sortie standard et le sortie d' | ou les inclures (on rassemble alors en un seul canal la sortie standard et le sortie d' | ||
- | find . -print | + | find . 2>&1 liste | less |
Les options de la commande find sont nombreuses. | Les options de la commande find sont nombreuses. | ||
- | ^ Option ^ Signification | + | ^ Option ^ Signification |
- | | -name | Recherche par nom de fichier. | | + | | -name | Recherche par nom de fichier. |
- | | -type | Recherche par type de fichier. | | + | | -iname | Recherche par nom insensible à la casse |
- | | -user | Recherche par propriétaire. | | + | | -type | Recherche par type de fichier. |
- | | -group | Recherche par appartenance à un groupe. | | + | | -user | Recherche par propriétaire. |
- | | -size | Recherche par taille de fichier. | | + | | -group | Recherche par appartenance à un groupe. |
- | | -atime | Recherche par date de dernier accès. | | + | | -size | Recherche par taille de fichier. |
- | | -mtime | Recherche par date de dernière modification. | | + | | -atime | Recherche par date de dernier accès |
- | | -ctime | Recherche par date de création. | | + | | -mtime | Recherche par date de dernière modification |
- | | -perm | Recherche par autorisations d' | + | | -ctime | Recherche par date de création |
- | | -links | Recherche par nombre de liens au fichier. | | + | | -amin | Recherche par date de dernier accès en minutes.| |
+ | | -mmin | Recherche par date de dernière modification en minutes. | | ||
+ | | -cmin | Recherche par date de création en minutes. | | ||
+ | | -perm | Recherche par autorisations d' | ||
+ | | -links | Recherche par nombre de liens au fichier. | ||
Pour les options -size, -atime, -mtime, -ctime et -links, il faut spécifier une valeur, précédée par le signe '' | Pour les options -size, -atime, -mtime, -ctime et -links, il faut spécifier une valeur, précédée par le signe '' | ||
- | find . -mtime -3 -print | + | find . -mtime -3 |
affiche les fichiers dont les dernières modifications remontent à moins de 3 jours (donc tous les fichiers modifiés entre aujourd' | affiche les fichiers dont les dernières modifications remontent à moins de 3 jours (donc tous les fichiers modifiés entre aujourd' | ||
Ligne 37: | Ligne 79: | ||
Pour afficher tous les fichiers se terminant par '' | Pour afficher tous les fichiers se terminant par '' | ||
- | find . -name " | + | find . -name "*.c" |
+ | |||
+ | Vous pouvez utiliser les caractères joker '' | ||
+ | find . -name " | ||
+ | N' | ||
+ | | ||
Pour afficher tous les répertoires dont le nom se termine par '' | Pour afficher tous les répertoires dont le nom se termine par '' | ||
- | find . -type d -name " | + | find . -type d -name " |
- | Pour afficher tous les fichiers, on aurait utilisé le code f. \\ | + | |
- | Pour afficher tous les fichiers ayant une taille de 10 blocs9.1 | + | Pour afficher tous les fichiers, on aurait utilisé le '' |
- | find . -size 10 -print | + | Pour afficher tous les fichiers ayant une taille de 10 blocs : |
+ | find . -size 10 | ||
+ | | ||
ce qui est équivalent à demander la liste des fichiers ayant une taille de 5120 caractères : | ce qui est équivalent à demander la liste des fichiers ayant une taille de 5120 caractères : | ||
- | + | | |
- | | + | |
- | On aurait pu aussi demander la liste des fichiers ayant une taille supérieure (+200k) ou inférieure (-200k) à 200 Ko. \\ | + | On aurait pu aussi demander la liste des fichiers ayant une taille supérieure (+200k) ou inférieure (-200k) à 200 Ko. |
+ | find . -size +200k | ||
+ | | ||
Pour afficher tous les fichiers ayant une certaine permission exprimée en octale (voir section 1.9.6 page [*]) : | Pour afficher tous les fichiers ayant une certaine permission exprimée en octale (voir section 1.9.6 page [*]) : | ||
- | find . -perm 755 -print | + | find . -perm 755 |
+ | | ||
ou ayant au minimum les droits d' | ou ayant au minimum les droits d' | ||
- | + | | |
- | | + | |
Pour éxecuter la commande ls -l pour chaque fichier trouvé : | Pour éxecuter la commande ls -l pour chaque fichier trouvé : | ||
find . -type f -exec ls -l {} \; | find . -type f -exec ls -l {} \; | ||
+ | | ||
et pour demander confirmation avant chaque action : | et pour demander confirmation avant chaque action : | ||
- | |||
find . -type f -ok -exec rm {} \; | find . -type f -ok -exec rm {} \; | ||
+ | | ||
Toute autre commande peut être éxecutée avec l' | Toute autre commande peut être éxecutée avec l' | ||
- | Pour associer plusieurs critères avec -a pour et, -o pour ou, ! pour négation. Par exemple : | + | Pour associer plusieurs critères avec '' |
- | find . ! -user root -print | + | find . ! -user root |
+ | | ||
affiche tous les fichiers n' | affiche tous les fichiers n' | ||
- | + | | |
- | | + | |
affiche tous les fichiers se terminant par '' | affiche tous les fichiers se terminant par '' | ||
+ | |||
+ | . | ||
+ | |||
+ | |||
+ | On peut aussi afficher les infos que l'on veut avec printf | ||
+ | find . -printf '%f %u:%g %a' | ||
+ | Affichera le nom du fichier seulement suivi du user:group et dernière date d' | ||
+ | |||
+ | Si on veux savoir combien de fichiers sont utilisés par utilisateur | ||
+ | find . -printf ' | ||
+ | | ||
+ | ===== Alternatives ===== | ||
+ | |||
+ | **find** est récursif. Si vous voulez supprimer une liste de fichier dans un seul répertoire et donc sans supprimer les fichiers des sous répertoires, | ||
+ | |||
+ | ls *fichier*.txt | xargs rm | ||
+ | |||
+ | |||
+ | Sinon utilisez l' | ||
+ | find . -maxdepth 1 -type f | ||
+ |