Linux : Les commandes du terminal

Utiliser find et grep en pipe

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Après avoir fait une recherche avec find, utilisez le résultat avec un find pour effectuer une recherche de contenu dans grep.
06:49

Transcription

J'ai repris ici ma commande et je vais changer de stratégie. Je vais utiliser non pas un exec mais je vais faire un print, et à partir de cette liste, je veux faire un grep, je vais donc utiliser un pipe. Je vais envoyer à l'input du grep l'output du find. Et donc, je vais utiliser un pipe. Je vais faire comme ceci. Je vais faire un petit peu mieux d'ailleurs parce que je vais pas faire un print directement, mais je vais utiliser un autre type de sortie qui est le print 0. Bon vous allez voir la différence, ça me retourne le résultat sous une autre forme, en fait la forme, c'est chaque nom de fichier est suivi d'un caractère 0 et ça va être un caractère qui va pouvoir être reconnu comme la fin du fichier, c'est à dire la fin du nom du fichier avec son chemin. Pourquoi je fais ça? Parce qu'il peut y avoir des fichiers qui contiennent des espaces et des retours chariots notamment et à ce moment-là, ça risque d'être interprété comme 2 fichiers différents et ce que je vais faire, je vais vous montrer, c'est utiliser ce print 0 , donc cette forme de sortie spécifique qui va me permettre de régler des problèmes si j'ai des noms de fichier un peu bizarre, pour simplifier, je vais l'envoyer en pipe, cette sortie, à l'entrée d'une commande spécifique qu'on utilise très souvent avec find et qui est xargs, qui est une commande qui sert juste à récupérer des arguments et à les envoyer à une autre commande. Donc xargs a une option, qui est xargs -0, qui est faite pour récupérer le résultat du print 0. Donc, je fais mon find, je fais un print 0 de ce que j'ai trouvé, je vais dans xargs en lui disant : tu interprètes l'input avec ce format de print 0 et donc il va décomposer chaque nom de fichier et maintenant, il va être capable de l'envoyer à la commande que je vais lui donner en paramètre, c'est à dire à mon grep, et mon grep va faire une recherche de terme. je vous montre, j'ai trouvé dans mes différents fichiers le résultat, donc là j'ai chaque ligne de résultat, mais ce que je veux faire, c'est comme avant, faire un grep avec les options il, insensitive pour case insensitive, l pour afficher seulement le nom des fichiers, et voilà. Je fais un petit clear, je reprends ma commande, voilà ce que ça donne. Je fais un find, je cherche les fichiers, je l'envoie en print 0 à xargs qui le récupère sous forme de print0, qui fait un grep de terme sur le résultat qui est revenu du find, mais je trouve 3 fichiers. Facile, non? Peut-être un petit peu complexe. je peux aller plus loin que ça, par exemple, j'ai pas envie de prendre en compte les fichiers cachés qui commencent par un point. Bon, alors je vais rajouter dans mon find, je sais ici que je veux déjà avoir seulement les fichiers, et puis je vais rajouter un crotère qui va dire: je veux que le nom comporte un point comme ceci. Donc là, j'ai dit comporte parce que pour l'instant je veux avoir tous les fichiers avec un point, et puis je vais faire une négation de ça. Alors j'ai plusieurs façons de faire, mais pour vous montrer une méthode, je peux dire ! devant un critère. Ceci veut dire donc, fais une recherche dans le répertoire courant de tous les fichiers où le nom qui commence par un point ne se trouve pas, puisque je nie la recherche, je fais une négation de name qui commence par un point. On va regarder ce que ça donne, effectivement, j'ai seulement résultat et syslog. Alors très bien. Maintenant j'ai fait un grep et j'ai trouvé le résultat. Je vais vous montrer encore une étape supplémentaire, je vais utiliser ce résultat pour prendre des décisions sur les fichiers. par exemple, je voudrais supprimer ces 2 fichiers. Alors quand il y a un fichier qui n'est pas un fichier caché et qui contient le mot terme, eh bien je veux m'en débarrasser. J'aurais pu utiliser la syntaxe exec du find pour faire la même chose, quoique non, parce que il faut que je passe dans le grep. Donc, il vaut mieux que je le fasse avec un pipe, effectivement, parce que le find ne va pas me trouver quelque chose avec un fichier qui contient une chaîne de caractère. Donc, je vais continuer avec mon raisonnement de pipe. maintenant j'ai un résultat. On est d'accord, j'ai deux fichiers, eh bien, je peux simplement récupérer ce résultat et faire avec un pipe, un rm de ce qui va arriver en input de rm par la output du pipe. Et comme ça, vous voyez, j'ai un léger problème. On me dit, bof, je comprends rien à cette histoire. rm opérant une manquante. N'oubliez pas d'ajouter xargs. Xargs, sur des commandes comme rm, va donc convertir l'output en une suite d'arguments pour une commande. Donc c'est clairement xargs, que je dois utiliser ici, pour dire ce qui va venir ici, c'est à dire la liste de mes deux fichiers, eh bien xargs va les prendre et convertir en argument pour rm. Est-ce que j'ai toujours mes fichiers? Non, mes fichiers résultat, et syslog ont bel et bien disparu. Vous voyez la puissance de la chose, avec find et des pipes, vous pouvez lier des commandes et finalement chercher dans tout votre système de fichiers, certains fichiers, certains répertoires qui sont vides par exemple, et les supprimer. Je vous dis par exemple qu'ils sont vides parce que c'est assez courant. On peut faire un find et vous vous souvenez de l'option empty qui va récupérer seulement les, par exemple, répertoires qui sont vides à partir de la racine, et ensuite le résultat, je peux faire un print0, et ensuite je vais le piper avec un xargs0, et je vais faire un rm -fr comme ceci, ou bien, un rm -dir. Et là je vais supprimer tous les répertoires qui sont vides. Donc, vous pouvez faire énormément de choses automatiques, grâce à find, au pipe, à xargs. C'est souvent la réponse à des problèmes compliqués.

Linux : Les commandes du terminal

Découvrez l’utilisation de nombreuses commandes et options qui vous faciliteront la vie lors de l’administration de Linux. Franchissez ainsi une étape dans votre expertise.

1h59 (25 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :29 févr. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !