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 :

Script bash aide


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 142
    Par défaut Script bash aide
    Salut,

    je voudrais en ligne de commande bash pouvoir :

    > lister tous les chemins vers les dossiers s'appelant toto

    find . -type d -name *toto*

    > à partir de ça, lister le contenu de chaque dossier toto et l'écrire dans un fichier au même niveau que toto

    find . -type d -name *toto* -exec ls {} \;

    Comment générer un fichier contenant la liste des fichiers situés dans toto et le positionner au même niveau que toto ?

    merci

  2. #2
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Bonjour,

    Pour lister tous les chemins vers les dossiers s'appelant toto, ton find peut renvoyer des dossiers incorrects mais contenant bien la chaine toto. Je partirais plus vers quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find chemin_absolu -type d -regex 'chemin_absolu\/toto$' > /tmp/toto.txt
    Il est important de mettre le chemin absolu du dossier de départ et non un 'point' pour que le find retourne un chemin lisible et pas ./Desktop/toto.

    Pour lister le contenu de chaque dossier toto et l'écrire dans un fichier au même niveau que toto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{system("ls " $0 " > " $0".txt")}' /tmp/toto.txt
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 142
    Par défaut
    yes merci

    je comprends tout à fait le . qu'il faut remplacer par le chemin absolu ... logique ... par contre je ne comprends pas ta regex dans le find ... pour ce qui est des erreurs, je ne vois pas pourquoi il peut y avoir des erreurs ? je cherche avec -name les dossiers qui s'appellent toto ... c'est un exactmatch non ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 142
    Par défaut
    ouais ba le awk ... marche pas

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 142
    Par défaut
    en fait il me génère un seul fichier qui contient les résultats de tous les ls et le fichier se trouve au même niveau que toto.txt

    je précise que chemin_absolue contient une arborescence de dossiers à plusieurs niveaux et il existe pas moins de 100 dossiers toto à des niveaux différents.

  6. #6
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Citation Envoyé par mbibim63 Voir le message
    en fait il me génère un seul fichier qui contient les résultats de tous les ls et le fichier se trouve au même niveau que toto.txt
    Vérifie ta commande, attention aux "" et aux espaces qui sont importants.
    Je ne sais pas trop quoi te dire à part que j'ai testé et que ca marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{system("ls " $0 " > " $0".txt")}' /tmp/toto.txt
    Explications :
    awk lit le fichier /tmp/toto.txt ligne par ligne. A chaque passage sur une ligne, la chaine de caractère correspondant à la ligne en cours de lecture est stockée dans $0 (variable implémentée par awk). Et donc pour chaque ligne, la commande suivante est exécutée :
    Ce qui donne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    exemple de contenu de /tmp/toto.txt
    /home/user/toto
    /hone/user/Desktop/toto
     
    awk va donc exécuter :
    ls /home/user/toto > /home/user/toto.txt
    ls /home/user/Desktop/toto > /home/user/Desktop/toto.txt
    Un fichier toto.txt est créé au même niveau que le dossier toto en cours, comme tu l'as demandé.
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  7. #7
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Je viens de revoir le man de find. En effet, on dirait bien les * ne servent à remplacer que les . de début de dossier (=dossiers cachés).
    D'habitude, * signifie aucun * tous les caractères, c'est pour ca que j'étais pas trop d'accord.
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  8. #8
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Ben je sais pas quoi te dire à part que je viens de tester chez moi et que ca fonctionne...
    Essaie avec -name alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find chemin_absolu -type d -name 'toto' > /tmp/toto.txt
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 142
    Par défaut
    ok pour le find ... ça marche ... et pour le awk, tu pourrais me détailler un peu le sujet parce que pour l'instant ça fait ce que j'ai dit plus haut ?

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour un script bash
    Par llove dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 18/05/2011, 13h15
  2. Script bash - besoin d'aide avec sed & awk
    Par Obiwan31 dans le forum Unix
    Réponses: 1
    Dernier message: 23/04/2010, 10h11
  3. aide sur script bash
    Par duboi dans le forum Linux
    Réponses: 4
    Dernier message: 22/11/2009, 18h20
  4. Aide pour script bash
    Par cmoiki dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/01/2007, 23h50

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