# find La commande **find** permet de retrouver des fichiers à partir de certains critères. Elle doit être utilisé avec l'option **-print** Les critères de recherche sont les suivants : - **-name** recherche sur le nom du fichier, - **-perm** recherche sur les droits d'accès du fichier, - **-links** recherche sur le nombre de liens du fichier, - **-user** recherche sur le propriétaire du fichier, - **-group** recherche sur le groupe auquel appartient le fichier, - **-type** recherche sur le type (d=répertoire, c=caractère, f=fichier normal), - **-size** recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets), - **-atime** recherche par date de dernier accès en lecture du fichier, - **-mtime** recherche par date de dernière modification du fichier, - **-ctime** recherche par date de création du fichier. Options: Recherche par nom de fichier: ```bash find /usr -name toto -print find /usr -name " *.c " -print # commence par un a ou A, suivi de quelque chose, et se termine par un chiffre compris entre 3 et 6 find . -name '[aA]*[3-6]' -print ``` Recherche suivant la date de dernière modification: ```bash # modifiés il y a 30 jours find / -mtime 30 -print # modifiés il y a 30 jours ou plus find / -mtime +30 -print # modifiés il y a 30 jours ou moins find / -mtime 30 -print ``` ```bash find . -mtime +0 # find files modified greater than 24 hours ago find . -mtime 0 # find files modified between now and 1 day ago (i.e., in the past 24 hours only) find . -mtime -1 # find files modified less than 1 day ago (SAME AS -mtime 0) find . -mtime 1 # find files modified between 24 and 48 hours ago find . -mtime +1 # find files modified more than 48 hours ago ``` Rechercher le plus vieux fichier: ```bash find / -type f -printf '%T+ %p\n' | sort | head -n 1 ``` Recherche suivant la taille: ```bash # fichiers dont la taille dépasse 30ko find / -size +30k -print ``` Recherche en utilisant les opérateurs logiques: ```bash # les fichiers n'appartenant pas à l'utilisateur olivierles fichiers n'appartenant pas à l'utilisateur olivier find . ! -user olivier -print # Recherche les fichiers dont le nom est a.out ou les fichiers se terminant par *.c (une condition OU l'autre). find . \ ( -name a.out -o -name " *.c " \ ) -print # Recherche des fichiers dont le nom est core et d'une taille supérieure à 1Mo (une condition ET l'autre). find . \ (-name core -a size +2000 \ ) -print ``` Recherche combinée: ```bash # les fichiers de l'utilisateur bruno dont les permissions sont 755 find / -type f -user bruno -perm 755 -print ``` Recherche avec regex: ```bash # les images avec extentions jpg|gif|png|jpeg dans le dossier Users # -E => macOS only ?? find -E /Users/bruno -regex ".*\.(jpg|gif|png|jpeg)" # non case-sensitive find -E /Users/bruno -iregex ".*\.(jpg|gif|png|jpeg)" ``` Commandes en option: ```bash # Recherche les fichiers toto et les efface. find . -name toto -exec rm {}\ ; # Pour avoir une demande de confirmation avant l'exécution de rm find . -name toto -ok rm {}\ ; ``` Utilisation avec d'autres commandes:' ```bash # Recherche les fichiers normaux dans le répertoire courant, puis chercher le chaine toto dans ces fichiers. find . -type f -print | xargs grep toto # Recherche les fichiers toto et les efface après confimation (-p). # idem -exec, " | xargs " ne crée qu'un seim processus. find . -name toto | xargs -p rm ``` Redirection des messages d'erreur: ```bash find / -name toto -print 2>/dev/null ```