Files
varlog/_cache/articles/87a982e5-05e9-4766-965c-ed5288cdb89e.json
T
2026-05-15 10:37:48 +02:00

1 line
5.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"uuid":"87a982e5-05e9-4766-965c-ed5288cdb89e","slug":"rechercher","title":"Rechercher sous Linux Terminal","author":"cedric@abonnel.fr","published":true,"published_at":"2022-11-18 07:53:20","created_at":"2022-11-18 07:53:20","updated_at":"2022-11-18 07:53:20","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Informatique","content":"# Rechercher sous Linux Terminal\n\n![](20211109-084357.png)\n\n## Sommaire\nUn petit mémo sur les recherches de fichiers en ligne de commande sous Linux avec **find** et **grep**. Pour tous les exemples de **find** jutilise loption **-exec** qui permet dappliquer une autre commande (**ls**, **rm**, etc…) aux résultats de la recherche. Évidemment on nest pas obligé.\n\n## - Recherche de fichiers et répertoires sur le nom\n![Chercher un fichier](20221118-084820.png)\n\nLister les fichiers dont le nom est « toto » à partir du répertoire courant :\n\n```bash\nfind . -name \"toto\" -exec ls -lh \"{}\" \\;\n```\n\n---\n\nPour ce type de recherche simple il ne faut pas oublier la commande locate, très rapide car elle va lire une base dindexation au lieu de parcourir larborescence 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 » :\n\n```bash\nlocate toto\n```\n\n---\n\nPour faire une recherche insensible à la casse on utilise -iname à la place de -name :\n\n```bash\nfind . -iname \"toto\" -exec ls -lh \"{}\" \\;\n```\n\n---\n\nLister les fichiers dont lextension est « .log » à partir du répertoire courant :\n\n```bash\nfind . -name \"*.log\" -exec ls -lh \"{}\" \\;\n```\n\n---\n\nLister les répertoires dont le nom est « toto » à partir du répertoire courant :\n\n```bash\nfind . -name \"toto\" -type d -exec ls -d \"{}\" \\;\n```\n\n---\n\n![](20211113-073211.png)\n\nLister les répertoires où se trouve le fichier de nom « toto » à partir du répertoire courant :\n\n```bash\nfind . -name \"toto\" -exec ls -d \"{}\" \\;\n```\n\nou\n\n```bash\nfind \"toto\" -name . -printf '%h\\n'\n```\n\n---\n\nLister les répertoires dont le chemin contient « /local/bin » à partir du répertoire courant :\n\n```bash\nfind . -wholename \"*/local/bin*\" -type d -exec ls -d \"{}\" \\;\n```\n\n---\n\nOn peut combiner les critères avec les opérateurs -a pour et, -o pour ou et ! pour la négation.\n\nLister les répertoires dont le nom est « toto » qui ne sont pas un sous-répertoire de « /scripts/bash »\n\n```bash\nfind . \\( -name \"toto\" -a ! -wholename \"*/scripts/bash/*\" \\) -exec ls -d \"{}\" \\;\n```\n\n---\n\n## - Recherche de gros fichiers\n![Rechercher de gros fichiers](20221118-085145.png)\n\nPour lister les fichiers de plus de 500Mo à partir du répertoire courant :\n\n```bash\nfind . -size +500M -exec ls -lh \"{}\" \\;\n```\n\nPour supprimer ces mêmes fichiers avec confirmation :\n\n```bash\nfind . -size +500M -exec rm -iv \"{}\" \\;\n```\n\n## - Rechercher par la date\n![Recherche par date](20221118-084312.png)\n\nLister les fichiers qui nont pas été modifiés depuis 2 mois, à partir du répertoire courant :\n\n```bash\nfind . -mtime 60 -exec ls -lh \"{}\" \\;\n```\n\n## - Comptage de fichiers\n![Compter](20221118-084422.png)\n\nCompter le nombre de fichiers du répertoire courant :\n\n```bash\nfind . -maxdepth 1 -type f | wc -l\n```\n\n![](20211113-073645.png)\n\nCompter le nombre de fichiers pdf dans le répertoire courant et ses sous-répertoires :\n\n```bash\nfind . -type f -iname \"*.pdf\" | wc -l\n```\n\n## - Rechercher dans le contenu des fichiers avec grep\n![Chercher dans le contenu des fichiers](20221118-084724.png)\n\nRecherche les fichiers contenant « toto » dans le répertoire courant, affiche le nom du fichier et la ligne correspondante :\n\n```bash\ngrep \"toto\" *\n```\n\n---\n\nLa même chose avec une recherche récursive dans les sous-répertoires :\n\n```bash\ngrep -r \"toto\" *\n```\n\n---\n\nRecherche sans tenir compte de la casse :\n\n```bash\ngrep -i \"toto\" *\n```\n\n— *[Ta vie on s'en fout !](https:*tavie.onsenfout.com/2015/03/03/recherche-de-fichiers-sous-linux/) 2021/11/07 12:38:21//\n\n## - Recherche dans le contenu des fichiers ODT / LibreOffice avec grep\n![Libre Office Icone](20221118-084045.png)\n\nScript à écrire dans `~/scripts/search-odt` :\n```BASH\n#!/bin/bash\n\nfind . -type f -name \"*.odt\" | while read i ; do\n [ \"$1\" ] || { echo \"You forgot search string!\" ; exit 1 ; }\n unzip -ca \"$i\" 2>/dev/null | grep -iq \"$*\"\n if [ $? -eq 0 ] ; then\n echo \"string found in $i\" | nl\n fi\ndone\n```\n\nPuis rendre executable le script :\n```BASH\nchmod +x ~/scripts/search-odt\nPATH=$PATH:~/scripts\n```\n\nAppeler le script dans un dossier :\n```\n[cedric24c@dskstd courrier]$ search-odt finances publiques\n 1\tstring found in ./2012/20121025204239.odt\n```\n\n## - Rechercher des dossiers vides\n![Dossier vide](20221118-083640.png)\n\nEffacer les dossiers et sous-dossiers vides.\n\n```\nfind . -empty -type d -delete\n```\n\n## - Voir aussi\nRechercher dans des fichiers :\n-","featured":false,"tags":[]}