Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/09/2011, à 19:30

wolf85kunst

grep dans la commande find [RESOLU]

Bonjour à tous,

Je ne comprend pas bien le comportement de grep dans find :

find /homes/user/mesvideos -type f -exec egrep -o "[a-zA-Z0-9_\.-]*\.(avi|mkv|mpeg)$" {} \;

Cette commande ne me retourne rien. Alors que la suivante réagis comme je le souhaite, mais avec un egrep "pipé" :

find /homes/user/mesvideos -type f | egrep -o "[a-zA-Z0-9_\.-]*\.(avi|mkv|mpeg)$"

Cette commande me retourne bien les résultats de recherche correspondant à la regex.

Pouvais-vous m'expliquer ce fonctionnement ?

Merci.

Dernière modification par wolf85kunst (Le 27/09/2011, à 19:21)


Les raisonnables ont duré, les passionnés ont vécu.
-- 10.04 Lucid Lynx --

Hors ligne

#2 Le 25/09/2011, à 20:03

Postmortem

Re : grep dans la commande find [RESOLU]

Salut,
Dans la premiere commande, tu cherches l'expression dans les fichiers que find a trouvé.
Dans la 2ème, tu fais un grep sur le résultat du find, un peu comme si tu avais envoyé le résultat du find dans un fichier et que tu avais fait un grep sur ce fichier.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 25/09/2011, à 21:13

wolf85kunst

Re : grep dans la commande find [RESOLU]

Merci beaucoup pour la réponse. C'est désormais plus clair.

La commande appropriée pour lister les vidéos de ma filmothèque serait donc :

find /homes/user/mesvideos -type f | egrep -o "[a-zA-Z0-9_\.-]*\.(avi|mkv|mpeg)$"

Le problème c'est que je n'arrive pas à intégrer les crochets à ma regex : "[" et  "]". Toute la problèmatique c'est qu'ils font parti d'un ensemble "[.....]".
J'ai donc tenté de les échapper :

"[a-zA-Z0-9\[\]_\.-]*\.(avi|mkv|mpeg)$"

Mais cette commande ne me retourne plus rien, hors mon listing de vidéo contient bien des nom de fichier comportant les crochets.

Comment faire ?

Merci.

Dernière modification par wolf85kunst (Le 25/09/2011, à 21:15)


Les raisonnables ont duré, les passionnés ont vécu.
-- 10.04 Lucid Lynx --

Hors ligne

#4 Le 25/09/2011, à 21:34

Postmortem

Re : grep dans la commande find [RESOLU]

Tu pourrais faire tout simplement comme ça :

find /home/user/mesvideos -type f \( -name "*.mkv" -o -name "*.mpeg" -o -name "*.avi" \)

Ça évite d'utiliser grep.
Tu ne veux peut-être que les noms de fichiers sans le chemin ??
Alors, en repartant de ta commande, je pense pas que ton grep ait besoin d'être si complexe :

find /home/user/mesvideos -type f | egrep -o "[^/]*(avi|mkv|mpeg)$"

Ou une autre solution :

find /home/user/mesvideos -type f \( -name "*.mkv" -o -name "*.mpeg" -o -name "*.avi" \) -exec basename {} \;

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 25/09/2011, à 22:36

wolf85kunst

Re : grep dans la commande find [RESOLU]

Merci pour cette réponse complète.

En effet, ma regex était trop compliqué pour le résultat souhaité.
La négation sur le slash était une bonne idée à laquelle je n'avais pas pensé.
L'idée de coupler la commande "basename" à find est surement la meilleur, car moins coûteuse en temps de calcul.

Cependant, je me pose toujours la question : comment réaliser une expression rationnelle avec un ensemble de caractère contenant un crochet ? Comme expliqué sur mon premier post, malgrès l'échappement du caractère spécial, la commande ne réponds rien.

Merci pour tout.


Les raisonnables ont duré, les passionnés ont vécu.
-- 10.04 Lucid Lynx --

Hors ligne

#6 Le 25/09/2011, à 22:40

Postmortem

Re : grep dans la commande find [RESOLU]

Si mes souvenirs sont bons, il faut inclure les crochets au tout début :

[][a-z]

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 26/09/2011, à 01:14

wolf85kunst

Re : grep dans la commande find [RESOLU]

Merci pour ce complément. Je marque ce sujet comme résolu.


Les raisonnables ont duré, les passionnés ont vécu.
-- 10.04 Lucid Lynx --

Hors ligne