Les différentes méthodes de recherche

Locate: recherche rapide

Locate fait une recherche dans la base de données et pas sur le disque.

$ locate nom_du_fichier_ou_dossier

On peut au préalable mettre à jour la base de données

$ updatedb

Find: recherche plus approfondie

La syntaxe quand on utilise find pourrait être traduite ainsi: find "où" "quoi" "que faire avec"
seul le paramètre "quoi" est obligatoire.

Si "que faire avec" n'est pas renseigné c'est "-printf" qui est utilisé par défaut ( voir utilisation avancée ).

Recherche par nom

$ find -name "*.jpg"

$ find /var/log/ -name "*log*"

$ find / -name "toto.png"

Recherche par taille

$ find / -size +10M

M = Mo, k = ko, G = Go

 Recherche par date

Chercher un fichier .odt ouvert il y a moins de 7 jours

$ find -name "*.odt" -atime -7

Chercher un fichier ouvert il y a plus de 10 jours

$ find -atime +10

 Recherche filtrée par type

$ find -name "toto" -type d

Find: utilisation avancée

Formatage de l'affichage

$ find -name "*.avi" -printf "%p - %u\n"

Compter les éléments

Compter tous les éléments du répertoire courant:

$ find ./ | wc -l

Compter tous les fichiers du répertoire courant:

find ./ -type f | wc -l

Compter tous les dossiers du répertoire courant:

find ./ -type d | wc -l

A propos de wc

rechercher et supprimer

$ find ~/temp/ -name "*.jpg" -delete

/!\ pas de confirmation /!\

Appeler une commande

$ find ~ -name "*.jpg" -exec chmod 600 {} \;

Avec -exec la commande est silencieuse, il est possible de demander confirmation pour chaque fichier trouvé en utilisant -ok à la place de -exec.

Rechercher une chaine dans le contenu des fichiers d'un répertoire

$ find /arbor/escence -type f -exec grep -H 'chaine' {} \;

Recherche la chaine de caractères spécifiée, de façon non sensible à la casse.

$ find /arbor/escence -type f -exec grep -i "phrase a chercher" {} \; -print

Rechercher et remplacer une chaine par une autre dans des fichiers

Dans cet exemple nous remplaçons la chaine <div class="maclass"\> par <div id="monid"\> dans tous les fichiers .php de l'emplacement courant.

$ find . -name "*.php" -print | xargs sed -i 's/<div class="maclass">/<div id="monid">/g'

 Supprimer les fichiers du même nom dans un répertoire et ses enfants

$ find rep/ -type f -name fichier.txt -exec rm {} \;

A lire aussi

Un récapitulatif et de nombreux exemples d'utilisation de "find" sur admin-linux.fr

Voir aussi la commande grep

Astuces

Afficher la n ème ligne d'un fichier

Afficher la 532 ème ligne de fichier.txt

$ sed -n '532p' fichier.txt

ou

$ awk 'NR==532' fichier.txt
^