logo_loupe.jpg

Rechercher des fichiers en ligne de commande

Que vous n'aimiez pas les applications graphiques ou que vous administriez une machine sans environnement de bureau, vous aurez rapidement besoin de chercher, et surtout de trouver des fichiers, qu'ils soient fichiers système ou fichiers personnels.

Il existe des commandes utilisables dans une console ou un script de recherche facilitant ces accès, sans avoir besoin de parcourir inlassablement vos dossiers.

Ne cherchez plus vos fichiers, trouvez les…

Son point fort : la recherche systématique.
find est un besogneux qui arpente vos dossiers infatigablement. Il a accès à la totalité de l'arborescence mais il vous est vivement conseillé de la circonscrire si l'on veut obtenir un résultat dans un délai correct. L'interface le permet de façon simple pour un débutant avec notamment l'inclusion des signets de Nautilus et une fonction "autre" destinée à sélectionner le répertoire que vous lui désignez. Voir find.

Une alternative à find : fd sur github.

Installable via un PPA

Son point fort : la recherche plein texte.
L'interface peut grâce à cette commande réaliser dans certaines conditions une recherche plein texte. grep est optimisé pour le travail en console portant sur la recherche à l'intérieur de fichiers créés par un éditeur de texte et surtout pour le monde raréfié des expressions rationnelles. Il donne avec cette interface de bons résultats pour les fichiers aux formats proches du format texte (txt, rtf, abw) mais aucun notamment avec les formats odt et pdf. Enfin, on peut considérer que l'adaptation graphique de grep aux besoins courants (14 choix possibles…) constitue un effort remarquable au profit de l'utilisateur moyen sinon du pur débutant. Voir grep.

Par contre cet outil ne permet pas de chercher dans les fichiers type .odt dont le contenu est compressé. pour ce faire on utilisera la ligne de commande en combinant find grep et unzip, pour cela adaptez cette commande à votre cas :
find chemin/du/répertoire -name '*.odt' -exec sh -c 'unzip -c "{}" content.xml | grep -qi "motàchercher"' ";" -print

(Référence trouvée dans cet article de Linuxpedia).

Pour ce qui est des fichiers .pdf, la recherche se fera aussi en ligne de commande de la même façon qu'avec grep mais en installant auparavant pdfgrep.

Nota : lorsque la recherche plein texte porte sur la totalité du système de fichiers, il peut arriver que l'outil de recherche vous indique n'avoir pas eu la permission d'ouvrir certains fichiers. Bien que ceci n'ait rien d'anormal, essayez de préférence dans ce cas de limiter le périmètre de recherche.

Ripgrep est une alternative à Grep mais avec ces avantages : - gestion complète de l'Unicode - beaucoup plus rapide

Installable via un PPA

Les fonctions de locate peuvent être fournies par les paquets locate et mlocate. Ils se différencient par les points suivants:

  • mlocate ajoute un horodatage qui accélère significativement la ré-indexation.
  • mlocate respecte les droits utilisateurs pour des raisons de sécurité (pas d'info sur /root par exemple pour user).

Que vous ayez l'un ou l'autre de ces paquets, ou les deux paquets installés,les commandes en console et les fichiers de configuration restent rigoureusement les mêmes. Si vous installez les deux paquets, vous bénéficierez de la vitesse de mlocate sans être contraint par ses limitations. Regardez aussi à ce sujet le paragraphe sécurité plus bas.

Contrainte espace

L'espace de la recherche par défaut est pour l'essentiel celui de la partition principale, dite "racine", à l'exception de certains fichiers temporaires et des dossiers éventuels placés sous l'arborescence /media. Ceci n'est pas une lacune mais un choix délibéré destiné à éviter des indexations inutiles. L'espace de recherche peut inclure d'autres systèmes de fichiers (Fat32, reiserfs, etc.) pourvu qu'ils soient montés - par exemple sur /mnt -.

Nota : l'espace de recherche est paramétrable par édition du fichier de configuration /etc/updatedb.conf. Dans ce fichier, c'est le champ "PRUNEPATH" qui interdit par défaut l'indexation des chemins suivants: "/tmp, /var, /spool, /media".

Utilisation

locate trouvera instantanément le chemin de l'élément recherché à deux conditions :

  • temps : le répertoire ou le fichier a été ajouté ou déplacé avant la dernière indexation.
  • espace : le répertoire ou le fichier est situé dans l'espace décrit ci-dessus.
  1. Ouvrez la console. Tapez en cas de contrainte éventuelle :
sudo updatedb

puis pour lancer la recherche, tout simplement :

locate fichier

la console affichera alors tous les chemins incluant le mot bidule.

Et si...

  • je monte une nouvelle partition ?

La base de données de locate représente environ un demi-millième de vos données, soit 2 mégas pour 4 gigas de données. Si vous montez par exemple une partition Suse de 4 Gigas sur /mnt/suse et vous ré-indexez (1 à 2 min.) la nouvelle base va doubler de taille (4 mégas) et permettra à locate d'y chercher sans problème. Si vous démontez cette partition Suse, locate ne vous donnera plus de résultat sur la partition démontée.

Par contre, toute partition montée de façon permanente sur l'arborescence /mnt (et non /media rappelez-vous !) sera indexée automatiquement chaque jour.

  • j'obtiens trop de réponses ?

Vous cherchez par exemple avec locate le suffixe .mp3 ou .rtf. Il peut arriver que locate recense plus de 500 réponses positives soit plus que la valeur par défaut des lignes d'historique de la console Gnome. Problème : la console n'affichera alors que le bas de la liste. Pour y remédier, ajouter juste un "tube" avec less (voir : Commandes de base Vous pourrez ainsi afficher les résultats page par page à partir de la première page.

locate .mp3 | less

Si la liste est encore trop importante, vous pouvez rajouter un deuxième critère de recherche avec la commande grep de la façon suivante :

locate icon | grep firefox | less

Vous pouvez aussi sauvegarder le résultat de votre recherche dans un fichier créé à cet effet (nom choisi : liste.txt) :

locate .mp3 | tee liste.txt
# ou bien :
locate .mp3>liste.txt

Sécurité

La base de données est activée par défaut sur Ubuntu et n'est pas sécurisée. Ainsi, dans le cas d'utilisation de disques chiffrés, la confidentialité des données peut être compromise par une simple consultation.

Comme la base de données est consultable par tous, un utilisateur peut avoir accès à l'arborescence d'un dossier normalement interdit en utilisant la commande locate.

Si cela constitue un souci pour vous, il ne vous faudra installer que le paquet mlocate.

Conclusion : locate est un outil aussi simple que pratique ne présentant que de faibles contraintes.

Rechercher des packages

Il existe aussi, faisant double emploi aux deux outils cités plus haut, quelques outils propres aux paquets Debian pour qui la recherche de l'emplacement de fichiers n'est qu'une fonction secondaire. Un mot sur leur utilisation en cas de recherche :

  • Utiliser la console pour lancer dpkg
dpkg -L fichier

La procédure est plus longue : Synaptic est lancé après le mot de passe. Recherchez votre fichier. Une fois que le paquet recherché apparait dans le listing de droite, sélectionnez-le, faites un clic droit et sélectionnez propriétés > fichiers installés. Vous verrez enfin dans une petite fenêtre l'endroit où est installé votre fichier.

  • Les autres

Citons notamment le logiciel "Aptitude" qui a aussi une fonction de recherche.

Comme vous l'avez compris, point d'interface, de jolis icônes ou d'effets spectaculaires. Pour tous ces besoins ou parce que la ligne de commande vous donne la migraine, voyez la page consacrée à la recherche de fichiers en mode graphique.

  • recherche_ligne_commande.txt
  • Dernière modification: Le 11/09/2022, 10:32
  • par moths-art