Les différentes méthodes de recherche

Rechercher une commande déjà tapée dans le shell

 Rechercher une commande bash dans l'historique

La commande history va retourner la liste de toutes les commandes tapées par l'utilisateur courant depuis l'installation de la machine hôte.

$ history
  281  sudo apt install webp
  282  cwebp -q 50 MonthyPython-cadre.png -o MonthyPython-cadre.webp
  283  cd ../divers/
  284  cwebp -q 50 soroban-on-line.jpg -o soroban-on-line.webp
  285  cwebp -q 100 soroban-on-line.jpg -o soroban-on-line.webp
  286  cd ../../app/bouliers/
  287  ls
  288  cwebp -q 75 bg.jpg -o bg.webp
  289  cwebp -q 75 compteur_citroen-cx-2000.png -o compteur_citroen-cx-2000.webp
  290  cwebp -q 90 compteur_citroen-cx-2000.png -o compteur_citroen-cx-2000.webp
  291  cwebp -q 100 compteur_citroen-cx-2000.png -o compteur_citroen-cx-2000.webp
  292  ssh boby@100.101.102.103
  293  man img2webp 
  294  man webpmux
  295  cd Images/
  296  ls
  297  cd vrac/

On relance une commande avec le numéro d'une commande précédée d'un point d'exclamation.

$ !282

L'emplacement et le nom du fichier où est stocké l'historique des commandes dépendra de votre distribution et de votre shell. ( ~/.bash_history )

 Rechercher une commande bash par mot clé

Plutôt qu'une recherche dans l'historique, on peut préférer la combinaison de touches [ctrl]+[r] puis tapez quelques caractères de la commande recherchée:

(reverse-i-search)`pin': ping gogolplex.com

Renouveler [ctrl]+[r] pendant une recherche affichera l’occurrence précédente s'il y en a.

(reverse-i-search)`pin': ping gogolplex.org

Une astuce avec cette méthode consiste à placer un mot clé en commentaire de commande grâce au caractère # comme ceci: $ ma --commande -o trop/dur/a/retenir #mot_cle.

Rechercher parmi les fichiers et dossiers

Locate: recherche de fichier 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 de fichier 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"

Pour une recherche insensible à la casse (majuscule et minuscules confondues) utilisez l'option "-iname" au lieu de "-name".

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

Astuce: 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
11-Nov-2023
^