no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | informatique:bash:rechercher [2022/11/18 08:53] (Version actuelle) – Cédric ABONNEL | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Rechercher sous Linux Terminal ====== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== Sommaire ===== | ||
+ | |||
+ | Un petit mémo sur les recherches de fichiers en ligne de commande sous Linux avec **find** et **grep**. Pour tous les exemples de **find** j’utilise l’option **-exec** qui permet d’appliquer une autre commande (**ls**, **rm**, etc…) aux résultats de la recherche. Évidemment on n’est pas obligé. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== - Recherche de fichiers et répertoires sur le nom ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Lister les fichiers dont le nom est « toto » à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -name " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | Pour ce type de recherche simple il ne faut pas oublier la commande locate, très rapide car elle va lire une base d’indexation au lieu de parcourir l’arborescence des répertoires. Par contre les fichiers trop récents ne seront pas forcément indexés. La commande suivante recherche tous les fichiers dont le chemin contient « toto » : | ||
+ | |||
+ | <code bash> | ||
+ | locate toto | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | Pour faire une recherche insensible à la casse on utilise -iname à la place de -name : | ||
+ | |||
+ | <code bash> | ||
+ | find . -iname " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | Lister les fichiers dont l’extension est « .log » à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -name " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | Lister les répertoires dont le nom est « toto » à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -name " | ||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Lister les répertoires où se trouve le fichier de nom « toto » à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -name " | ||
+ | </ | ||
+ | |||
+ | ou | ||
+ | |||
+ | <code bash> | ||
+ | find " | ||
+ | </ | ||
+ | |||
+ | <WRAP clear/> | ||
+ | |||
+ | |||
+ | --- | ||
+ | |||
+ | Lister les répertoires dont le chemin contient « /local/bin » à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -wholename " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | On peut combiner les critères avec les opérateurs -a pour et, -o pour ou et ! pour la négation. | ||
+ | |||
+ | Lister les répertoires dont le nom est « toto » qui ne sont pas un sous-répertoire de « / | ||
+ | |||
+ | <code bash> | ||
+ | find . \( -name " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | |||
+ | ===== - Recherche de gros fichiers ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Pour lister les fichiers de plus de 500Mo à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -size +500M -exec ls -lh " | ||
+ | |||
+ | </ | ||
+ | |||
+ | Pour supprimer ces mêmes fichiers avec confirmation : | ||
+ | |||
+ | <code bash> | ||
+ | find . -size +500M -exec rm -iv " | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== - Rechercher par la date ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Lister les fichiers qui n’ont pas été modifiés depuis 2 mois, à partir du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -mtime 60 -exec ls -lh " | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== - Comptage de fichiers ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Compter le nombre de fichiers du répertoire courant : | ||
+ | |||
+ | <code bash> | ||
+ | find . -maxdepth 1 -type f | wc -l | ||
+ | |||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Compter le nombre de fichiers pdf dans le répertoire courant et ses sous-répertoires : | ||
+ | |||
+ | <code bash> | ||
+ | find . -type f -iname " | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== - Rechercher dans le contenu des fichiers avec grep ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Recherche les fichiers contenant « toto » dans le répertoire courant, affiche le nom du fichier et la ligne correspondante : | ||
+ | |||
+ | <code bash> | ||
+ | grep " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | La même chose avec une recherche récursive dans les sous-répertoires : | ||
+ | |||
+ | <code bash> | ||
+ | grep -r " | ||
+ | |||
+ | </ | ||
+ | |||
+ | --- | ||
+ | |||
+ | Recherche sans tenir compte de la casse : | ||
+ | |||
+ | <code bash> | ||
+ | grep -i " | ||
+ | |||
+ | </ | ||
+ | |||
+ | — // | ||
+ | |||
+ | |||
+ | ===== - Recherche dans le contenu des fichiers ODT / LibreOffice avec grep ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Script à écrire dans '' | ||
+ | <code BASH> | ||
+ | #!/bin/bash | ||
+ | |||
+ | find . -type f -name " | ||
+ | [ " | ||
+ | unzip -ca " | ||
+ | if [ $? -eq 0 ] ; then | ||
+ | echo " | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | Puis rendre executable le script : | ||
+ | <code BASH> | ||
+ | chmod +x ~/ | ||
+ | PATH=$PATH: | ||
+ | </ | ||
+ | |||
+ | Appeler le script dans un dossier : | ||
+ | < | ||
+ | [cedric24c@dskstd courrier]$ search-odt finances publiques | ||
+ | | ||
+ | </ | ||
+ | |||
+ | --- // | ||
+ | |||
+ | ===== - Rechercher des dossiers vides ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Effacer les dossiers et sous-dossiers vides. | ||
+ | |||
+ | < | ||
+ | find . -empty -type d -delete | ||
+ | </ | ||
+ | |||
+ | --- //{{ : | ||
+ | |||
+ | |||
+ | ===== - Voir aussi ===== | ||
+ | |||
+ | Rechercher dans des fichiers : | ||
+ | * [[informatique: | ||
+ | |||