Recherche de fichiers sous linux

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 "{}" \;

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 » :

locate toto

Pour faire une recherche insensible à la casse on utilise -iname à la place de -name :

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 "{}" \;

Lister les répertoires dont le nom est « toto » à partir du répertoire courant :

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 "{}" \;

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 "{}" \;

Recherche de gros fichiers

Pour lister les fichiers de plus de 500Mo à partir du répertoire courant :

find . -size +500M -exec ls -lh "{}" \;

Pour supprimer ces mêmes fichiers avec confirmation :

find . -size +500M -exec rm -iv "{}" \;

Recherches par la date

Lister les fichiers qui n’ont pas été modifiés depuis 2 mois, à partir du répertoire courant :

find . -mtime +60 -exec ls -lh "{}" \;

Lister les fichiers qui ont été modifiés depuis moins de 2 mois, à partir du répertoire courant :

find . -mtime -60 -exec ls -lh "{}" \;

Lister les fichiers qui ont été modifiés il y a exactement 60 jours, à partir du répertoire courant :

find . -mtime 60 -exec ls -lh "{}" \;

Archiver (déplacer) les fichiers modifiés en 2011. On commence par créer 2 fichiers qui vont définir les bornes de date:

touch --date "2011-01-01" /tmp/debut
touch --date "2011-12-31" /tmp/fin
find . -type f -newer /tmp/debut ! -newer /tmp/fin -exec mv "{}" ./2011/ \;

Comptage de fichiers

Compter le nombre de fichiers du répertoire courant :

find . -maxdepth 1 -type f | wc -l

Compter le nombre de fichiers pdf dans le répertoire courant et ses sous-répertoires :

find . -type f -iname "*.pdf" | wc -l

Recherches 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 :

grep "toto" *

La même chose avec une recherche récursive dans les sous-répertoires :

grep -r "toto" *

Recherche sans tenir compte de la casse :

grep -i "toto" *

Liens

Utilisation de la commande find
Faire une recherche dans les fichiers texte avec grep
man find
man grep

Rating: 4.5/5. From 6 votes.
Please wait...

4 réactions sur “Recherche de fichiers sous linux”

  1. Serveurperso

    Sans oublier updatedb c’est pratique pour MAJ la db de locate !

    Rating: 5.0/5. From 1 vote.
    Please wait...
  2. François

    De mon coté j’utilise logrotate pour archiver les logs compressées, en général les fichiers logs se compressent très bien. logrotate permet aussi de définir la durée de rétention et donc la purge automatique.

    Après, il faut voir pourquoi les fichiers de logs enflent tant: erreurs à corriger, verbosité des logs trop importante, bref tout ce boulot ingrat qui justifie à lui seul le salaire indécent de l’administrateur système 😉

    PS: j’ai supprimé le lien vers le site commercial, c’est pas le genre de la maison.

    No votes yet.
    Please wait...
  3. Christophe

    On avait régulièrement notre VPS qui sautait à cause des fichiers logs qui deviennent énormes.

    J’ai bien capté la commande pour lister les fichiers de plus de 500Mo, il ne me reste qu’à créer un cron pour être averti avant la prochaine saturation… vous faîtes comment de votre côté? (purge automatique des fichiers logs? merci)

    No votes yet.
    Please wait...

Laisser une réponse