IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Trouver les fichiers contenant un mot précis et en fonction de leur extension


Sujet :

Shell et commandes GNU

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut Trouver les fichiers contenant un mot précis et en fonction de leur extension
    Bonsoir,

    Quand je cherche une string dans un fichier texte de code (.c, .pas, .pp, etc.), je me mets dans le dossier qui va bien et j'utilise grep -ri "string-cherchée" * et en général ça me trouve ce que je cherche, mais ça analyse tous les fichiers de l'arborescence concernée : c'est long...
    D'un autre côté, je sais lister tous les fichiers de code contenus dans une arbo avec find -type f -iname '*.pas' -o -iname '*.pp'.

    Alors je m'étais dit que si j'envoyais la sortie du find dans le grep ça le ferait, mais je ne sais pas coder le passage de l'un à l'autre.
    J'ai honte mais je viens demander un peu d'aide, car l'idée c'est find -type f -iname '*.pas' -o -iname '*.pp' | grep -i $1 - mais ça ne fonctionne pas, hélas...

    Merci pour le coup de main,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f -iname '*.pas' -o -iname '*.pp' -exec grep -i "$1" {} +
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Grand merci pour cette 1re approche, mais je vais te demander encore un effort : je me suis permis de rajouter -o -iname '*.txt' après les .pas et les .pp, et le script ne cherche que dans les .txt !

    Une idée complémentaire pour qu'il cherche aussi avec les autres extensions ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f \( -iname '*.pas' -o -iname '*.pp' -o -iname '*.txt' \) -exec grep -i "$1" {} +
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Bonjour et bravo !

    Ça ne s'invente pas, des formules pareilles, bien joué !

    Excellente journée et encore merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Jipété Voir le message
    l'idée c'est find -type f -iname '*.pas' -o -iname '*.pp' | grep -i $1 - mais ça ne fonctionne pas, hélas...
    Normal, car, dans ce code, "grep" fait une chercher parmi les noms des fichiers (qu'envoie "find" sur la "stdout") et non sur leur contenu!

    Évidemment, la bonne solution, c'est avec l'option "-exec" de "find".

    Néanmoins, tu y étais presque! Il suffisait d'jouter "xargs" pour transformer la sortie de "find" en arguments pour "grep":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f -iname '*.pas' -o -iname '*.pp' | xargs grep -i "$1"
    Remarque: la solution avec "-exec" a l'avantage sur "xargs" de fonctionner aussi avec des fichiers dont le nom peut comporter des espaces, tabulations ou fins de ligne... ou alors il faut ruser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f -iname '*.pas' -o -iname '*.pp' -print0 | xargs -0 grep -i "$1"
    EDIT:
    J'ai pourtant bien lu la proposition de N_BaH, mais je n'ai pas bien percuté...

    Comme il y a un -o (c'est-à-dire un "ou"), il faut faire attention, car les les autres options sont implicitement connectées par un "et"...
    De plus, au moins sous macos, il faut un chemin, comme ".", par exemple:
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f \( -iname '*.pas' -o -iname '*.pp' \) | xargs grep -i "$1" # Sinon il va prendre les répertoires '*.pp'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f \( -iname '*.pas' -o -iname '*.pp' \) -print0 | xargs -0 grep -i "$1"

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par jack-ft Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f -iname '*.pas' -o -iname '*.pp' -print0 | xargs -0 grep -i "$1"
    moi j'aime bien la solution à coups de xargs, simplement parce qu'il suffit de lui adjoindre l'option -n pour que le traitement soit parallélisé au lieu de se limiter à l'utilisation d'un seul CPU, pour peu qu'on ait beaucoup de fichiers et/ou besoin d'aller vite c'est très pratique...

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Bonsoir,

    Bizarre bizarre, chez moi ça ne fonctionne pas alors que la ligne de N_BaH le fait tip-top
    Citation Envoyé par jack-ft Voir le message
    Remarque: la solution avec "-exec" a l'avantage sur "xargs" de fonctionner aussi avec des fichiers dont le nom peut comporter des espaces, tabulations ou fins de ligne... ou alors il faut ruser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find -type f -iname '*.pas' -o -iname '*.pp' -print0 | xargs -0 grep -i "$1"
    Me suis fait un script pour tester, et je vois bien que je n'ai qu'un retour... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     #!/bin/bash
     
    if [ -z "$1" ]; then echo "usage :" $0 "texte_à_chercher"; exit; fi
     
    echo avec N_BaH :
    find -type f \( -iname '*.pas' -o -iname '*.pp' -o -iname '*.txt' -o -iname '*.sh' \) -exec grep -i "$1" {} +
     
    echo avec jack-ft :
    find -type f -iname '*.pas' -o -iname '*.pp' -o -iname '*.txt' -o -iname '*.sh' -print0 | xargs -0 grep -i "$1"

    Citation Envoyé par BufferBob Voir le message
    moi j'aime bien la solution à coups de xargs, simplement parce qu'il suffit de lui adjoindre l'option -n pour que le traitement soit parallélisé au lieu de se limiter à l'utilisation d'un seul CPU, pour peu qu'on ait beaucoup de fichiers et/ou besoin d'aller vite c'est très pratique...
    Un ch'tit exemple ?, car je n'ai pas trouvé le "man" très causant sur ce coup-là...
    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Bonjour,

    Petite question, comme on est sous gnu, ceci ne fonctionnerait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -r --include="*.pas" --include="*.pp" --include="*.txt" -i "chaine_recherchée"
    (Sur ma version de grep (2.20) , cela fonctionne)
    Cordialement.

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Petite question, comme on est sous gnu, ceci ne fonctionnerait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -r --include="*.pas" --include="*.pp" --include="*.txt" -i "chaine_recherchée"
    Si si !

    Citation Envoyé par disedorgue Voir le message
    (Sur ma version de grep (2.20) , cela fonctionne)
    grep 2.12, Debian 7/32 bits, bash 4.2.37
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bonsoir,

    Bizarre bizarre, chez moi ça ne fonctionne pas alors que la ligne de N_BaH le fait tip-top


    Me suis fait un script pour tester, et je vois bien que je n'ai qu'un retour... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    if [ -z "$1" ]; then echo "usage :" $0 "texte_à_chercher"; exit; fi
     
    echo avec N_BaH :
    find -type f \( -iname '*.pas' -o -iname '*.pp' -o -iname '*.txt' -o -iname '*.sh' \) -exec grep -i "$1" {} +
     
    echo avec jack-ft :
    find -type f -iname '*.pas' -o -iname '*.pp' -o -iname '*.txt' -o -iname '*.sh' -print0 | xargs -0 grep -i "$1"
    J'ai corrigé ma proposition (pour la postérité) en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f \( -iname '*.pas' -o -iname '*.pp' \) -print0 | xargs -0 grep -i "$1"
    qui doit être équivalent à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -a \( -iname '*.pas' -o -iname '*.pp' \) -a -print0 | xargs -0 grep -i "$1"
    Dès qu'on a un "-o", il vaut mieux mettre des parenthèses au bon endroit...

    Est-ce que ça marche mieux?

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Un ch'tit exemple ?, car je n'ai pas trouvé le "man" très causant sur ce coup-là...
    j'ai marqué -n me suis planté, je pensais à -P ;p
    si t'as 4 cpus find / -print0 | xargs -0 -P4 grep truc, un thread par cpu ça va donc 4x plus vite

  13. #13
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Salut les aminches,

    Citation Envoyé par jack-ft Voir le message
    Dès qu'on a un "-o", il vaut mieux mettre des parenthèses au bon endroit...

    Est-ce que ça marche mieux?
    Oh ben vi ! Mais je n'ai pas vu la différence avec tes deux "-a" rajoutés... C'est pour quoi faire au juste (pas trouvé dans man) ?

    Citation Envoyé par BufferBob Voir le message
    j'ai marqué -n me suis planté, je pensais à -P ;p
    si t'as 4 cpus find / -print0 | xargs -0 -P4 grep truc, un thread par cpu ça va donc 4x plus vite
    Vi, mais comme je ne sais même pas combien j'ai de procs ( ), j'ai utilisé --max-procs=0 (man :
    If max-procs is 0, xargs will run as many processes as possible at a time.
    ) et ça fonctionne aussi, grâce aux parenthèses de jack-ft.


    Maintenant, je veux pas faire mon ch13ur, mais esthétiquement (et au-delà de la notion de performances soulevée par BB), c'est la soluce de disedorgue qui serait la plus belle, dans la mesure où les lignes affichées se passent du "./" au début.
    Le but de la manip étant de faire un clic-droit sur un dossier puis "ouvrir dans un terminal" et appeler le script pour chercher, je sais bien que je suis dans ce dossier donc "./" au début ne me sert à rien et brouille la lecture des résultats.
    Mais bon, c'est juste cosmétique, ça

    Bon dimanche,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Hmmm..., pour find, tu n'es pas non plus obligé de préciser le './', c'est la valeur qu'il prend par défaut...
    Et le '-a' de find sert à lier deux expressions par un "et logique" comme le '-o' pour le "ou logique". Et comme par défaut 2 expressions sont liées par un "et logique", le '-a' est facultatif.

    Et si on veut être équivalent au '-iname' de find, via la recherche de fichier du grep, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -r --include="*.[Pp][Aa][Ss]" --include="*.[Pp][Pp]" --include="*.[Tt][Xx][Tt]" "chaine_recherchee"
    Toujours aussi esthétique ?
    Cordialement.

  15. #15
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Hmmm..., pour find, tu n'es pas non plus obligé de préciser le './', c'est la valeur qu'il prend par défaut...
    Euh..., ce n'est pas moi qui le précise, c'est find qui me l'insère dans la sortie.

    Merci pour l'explication du "-a".

    Citation Envoyé par disedorgue Voir le message
    Et si on veut être équivalent au '-iname' de find, via la recherche de fichier du grep, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -r --include="*.[Pp][Aa][Ss]" --include="*.[Pp][Pp]" --include="*.[Tt][Xx][Tt]" "chaine_recherchee"
    Toujours aussi esthétique ?
    Toujours aussi parfait, dirais-je
    Manque juste l'option multicpu de BB pour le jour où je vais vouloir chercher une string dans toute l'arbo,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Dans ce cas, le plus simple est de corriger le défaut de sortie de find:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f \( -iname '*.pas' -o -iname '*.pp' \) -printf "%P\0" | xargs -0 grep -i "$1"
    Plus qu'à rajouter les options de BufferBob...
    Cordialement.

  17. #17
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Dans ce cas, le plus simple est de corriger le défaut de sortie de find:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f \( -iname '*.pas' -o -iname '*.pp' \) -printf "%P\0" | xargs -0 grep -i "$1"
    Plus qu'à rajouter les options de BufferBob...


    Le script final, pour en faire profiter... le monde entier,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
     
    if [ -z "$1" ]; then echo "usage :" $(basename $0) \"texte à chercher\"; exit; fi
     
    find . -type f \( -iname '*.pas' -o -iname '*.pp' -o -iname '*.txt' -o -iname '*.sh' \) -printf "%P\0" | xargs --max-procs=0 -0 grep -i "$1"
    Merci à tous,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #18
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    basename $0 -> ${0##*/}
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 104
    Points
    15 104
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    basename $0 -> ${0##*/}
    Rhôôô, tu pinailles, là, tu pinailles, masochiste !
    Parce qu'in fine, ce $(basename $0) va être interprété/décodé par Bash, qui va probablement le transformer en ${0##*/} et au bout du compte, on arrivera au même résultat mais avec une lisibilité catastrophique, à moins de connaître ces abréviations par cœur, d'où le "masochiste" de la ligne précédente,

    Il y a peut-être un problème de performances et j'admettrais volontiers la correction dans une boucle, mais là on est directement au niveau de la LdC alors bon...

    (mais j'ai quand même modifié le script en conséquence )
    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  20. #20
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Pour varier, dans zsh avec extended globbing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "chaine_recherchee" **/*.(pas|pp|txt)(.)
    ** : globbing récursif dans le répertoire et les sous-répertoires
    | : alternatives
    (.) : seulement les fichiers réguliers.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/12/2013, 00h17
  2. Supprimer les fichiers contenant les mots "xxxxxx"
    Par toxyco dans le forum VBScript
    Réponses: 3
    Dernier message: 10/06/2010, 09h53
  3. lister les fichiers contenant le mot PRINT non précédé d'un dièse ?
    Par Ekimasu dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 03/03/2009, 12h12
  4. Trouver les fichiers contenant des annotations
    Par lahitsitely78 dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 18/02/2009, 11h52
  5. Trouver les fichiers contenant un mot avec FINDSTR
    Par soazig dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/04/2007, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo