User Tools

Site Tools


os:linux:commande

Table of Contents

Commandes

Find

La commande find permet de chercher des fichiers, et eventuellement d'éxecuter une action dessus.

Aide

Usage: find [-HL] [PATH]... [OPTIONS] [ACTIONS]

Search for files and perform actions on them.
First failed action stops processing of current file.
Defaults: PATH is current directory, action is '-print'

        -L,-follow      Follow symlinks
        -H              ...on command line only
        -xdev           Don't descend directories on other filesystems
        -maxdepth N     Descend at most N levels. -maxdepth 0 applies
                        actions to command line arguments only
        -mindepth N     Don't act on first N levels
        -depth          Act on directory *after* traversing it

Actions:
        ( ACTIONS )     Group actions for -o / -a
        ! ACT           Invert ACT's success/failure
        ACT1 [-a] ACT2  If ACT1 fails, stop, else do ACT2
        ACT1 -o ACT2    If ACT1 succeeds, stop, else do ACT2
                        Note: -a has higher priority than -o
        -name PATTERN   Match file name (w/o directory name) to PATTERN
        -iname PATTERN  Case insensitive -name
        -path PATTERN   Match path to PATTERN
        -ipath PATTERN  Case insensitive -path
        -regex PATTERN  Match path to regex PATTERN
        -type X         File type is X (one of: f,d,l,b,c,...)
        -perm MASK      At least one mask bit (+MASK), all bits (-MASK),
                        or exactly MASK bits are set in file's mode
        -mtime DAYS     mtime is greater than (+N), less than (-N),
                        or exactly N days in the past
        -mmin MINS      mtime is greater than (+N), less than (-N),
                        or exactly N minutes in the past
        -newer FILE     mtime is more recent than FILE's
        -inum N         File has inode number N
        -user NAME/ID   File is owned by given user
        -group NAME/ID  File is owned by given group
        -size N[bck]    File size is N (c:bytes,k:kbytes,b:512 bytes(def.))
                        +/-N: file size is bigger/smaller than N
        -links N        Number of links is greater than (+N), less than (-N),
                        or exactly N
        -prune          If current file is directory, don't descend into it
If none of the following actions is specified, -print is assumed
        -print          Print file name
        -print0         Print file name, NUL terminated
        -exec CMD ARG ; Run CMD with all instances of {} replaced by
                        file name. Fails if CMD exits with nonzero
        -exec CMD ARG + Run CMD with {} replaced by list of file names
        -delete         Delete current file/directory. Turns on -depth option

Des exemples

find . -print | less
affiche la liste de tous les fichiers du répertoire courant (l'option -print est normalement incluse par défaut). On peut rediriger les messages d'erreur vers le “trou noir” (le périphérique /dev/null) :
find . -print 2> /dev/null | less
ou les inclures (on rassemble alors en un seul canal la sortie standard et le sortie d'erreur standard) :
find . -print 2>&1 liste | less

Pour les options -size, -atime, -mtime, -ctime et -links, il faut spécifier une valeur, précédée par le signe “+” pour “supérieur à”, “-” pour “inférieur à”, ou rien pour “égal à”. Par exemple :

find . -mtime -3 -print
affiche les fichiers dont les dernières modifications remontent à moins de 3 jours (donc tous les fichiers modifiés entre aujourd'hui et il y a trois jours seront affichés). De même, +5 afficherait les fichiers dont les dernières modifications remontent à plus de 5 jours.

Pour afficher tous les fichiers se terminant par “.c” :
find . -name ".c" -print
Pour afficher tous les répertoires dont le nom se termine par “s” :
find . -type d -name "*s" -print
Pour afficher tous les fichiers, on aurait utilisé le code f.

Pour afficher tous les fichiers ayant une taille de 10 blocs:
find . -size 10 -print
ce qui est équivalent à demander la liste des fichiers ayant une taille de 5120 caractères :
find . -size 5210c -print
On aurait pu aussi demander la liste des fichiers ayant une taille supérieure (+200k) ou inférieure (-200k) à 200 Ko.

Pour afficher tous les fichiers ayant une certaine permission exprimée en octale :
find . -perm 755 -print
ou ayant au minimum les droits d'écriture pour le groupe :
find . -perm -020 -print
Pour éxecuter la commande ls -l pour chaque fichier trouvé :
find . -type f -exec ls -l {} \;
et pour demander confirmation avant chaque action :
find . -type f -ok -exec rm {} \;
Toute autre commande peut être éxecutée avec l'option -exec.

Pour associer plusieurs critères avec -a pour et, -o pour ou, ! pour négation. Par exemple :
find . ! -user root -print
affiche tous les fichiers n'appartenant à root, et
find . \( -name '*.tex' -o -name '*.dvi' \) -print
affiche tous les fichiers se terminant par “.tex” ou “.dvi”.

On peut aussi enchainer la recherche avec une action:
find . -name "*.mkv" -exec mv {} /share/Videos/MOVIES/ +
Déplacer les fichiers de type mkv qui ont été trouvé dans le dossier courant dans le dossier “/share/Videos/MOVIES/”
find . -name "*.R@n50W" -delete
Supprimer les fichiers de type “*.R@n50W” trouvés

os/linux/commande.txt · Last modified: 2020/08/10 23:07 (external edit)