Testé sur Ubuntu 10.04
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. La chaîne "{}"
sera remplacée par le nom du fichier, \;
termine la commande.
Recherche de fichiers et répertoires sur le nom
Lister les fichiers dont le nom est « toto » à partir du répertoire courant :
find . -name "toto" -exec ls -lh "{}" \; |
find . -name "toto" -exec ls -lh "{}" \;
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 » :
Pour faire une recherche insensible à la casse on utilise -iname à la place de -name :
find . -iname "toto" -exec ls -lh "{}" \; |
find . -iname "toto" -exec ls -lh "{}" \;
Lister les fichiers dont l’extension est « .log » à partir du répertoire courant :
find . -name "*.log" -exec ls -lh "{}" \; |
find . -name "*.log" -exec ls -lh "{}" \;
Lister les répertoires dont le nom est « toto » à partir du répertoire courant :
find . -name "toto" -type d -exec ls -d "{}" \; |
find . -name "toto" -type d -exec ls -d "{}" \;
Lister les répertoires dont le chemin contient « /local/bin » à partir du répertoire courant :
find . -wholename "*/local/bin*" -type d -exec ls -d "{}" \; |
find . -wholename "*/local/bin*" -type d -exec ls -d "{}" \;
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 « /scripts/bash »
find . \( -name "toto" -a ! -wholename "*/scripts/bash/*" \) -exec ls -d "{}" \; |
find . \( -name "toto" -a ! -wholename "*/scripts/bash/*" \) -exec ls -d "{}" \;
Lire la suite »