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 :

Extraire les mots de nom de dossier dans une arborescence


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 52
    Points : 99
    Points
    99
    Par défaut Extraire les mots de nom de dossier dans une arborescence
    Bonjour

    J'ai un dossier qui contient des sous dossiers comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WEB TEH
    COMPUTER SCIENCE
    UNIX LINUX
    je veux , pour chaque sous dossier, extraire les 2 mots et les mettre dans 2 fichiers : file1.txt et file2.txt , d'ou , file1.txt contient (chaque mot est dans une ligne ) : WEB, COMPUTER,UNIX
    et file2.txt contient (TECH, SCIENCE, LINUX)

    j'ai essayé par ce scipt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/bash
    # Read and put nom/prénom dans un fichier
    #read -p "Enter Your Path: "  Path
    path="/home/youssef/New/*"
    for entry in $path
    do
     echo ${entry##*/}>>file.txt
    done
    #Browse folder 
    file="/home/youssef/file.txt"
    for f in $file
    do
     line=$(head -n 1 $f)
     echo $line
    done
    j'ai pu avoir la liste des nom de dossier dans un fichier texte "file.txt"

    mais , j'ai pas pu extraire les 2 mots pour chaque nom de dossier et les mettre dans 2 fichiers

    Merci

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Pourquoi LINUX irait-il dans le file2.txt et UNIX dans file1.txt, plutôt que UNIX dans file2.txt et LINUX dans file1.txt ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    Bonjour,

    il faut mettre en œuvre d'autre Remplacement de paramètres pour "séparer" les deux mots en se basant sur l'espace.
    il y a plusieurs méthodes simples pour séparer les mots d'une chaîne...
    utiliser read, un tableau, une commande externe.

    il faut éviter de recourir à des fichiers temporaires.

    un seule boucle sur les fichiers est suffisante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chemin='/chemin/vers'
    for f in "$chemin"/*
    ...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    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
    Bravo! Tu étais bien parti!

    Évidemment, nous ne souhaitons pas te donner la solution complète, mais te permettre de la trouver par toi-même.

    Voici ce que je te propose (en partant de ton script):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/bash
    # Read and put "nom prénom" dans un fichier
    #read -p "Enter Your Path: "  path
    path="/home/youssef/New"
     
    # Au cas où ils existeraient déjà
    rm -f file.txt file1.txt file2.txt
     
    for entry in "${path}"/*
    do
      # Pour avoir juste le nom de l'entrée sans le chemin,
      # enlever tous ("##") les caractères ("*") jusqu'au dernier "/" ("/")
      entry=${entry##*/}
     
      # Mettre "nom prénom" dans file.txt
      echo "${entry}" >> file.txt
     
      # Mettre "nom" dans file1.txt
      ... regarder du côté de ${entry%<quelque chose>}
     
      # Mettre "prénom" dans file2.txt
      ... regarder du côté de ${entry#<quelque chose>}
    done

  5. #5
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 52
    Points : 99
    Points
    99
    Par défaut
    je suis un peu débutant dans Shell

    tu peux m'aider ??

    j'ai pas compris votre réponse

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 52
    Points : 99
    Points
    99
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/bash
    path="/home/youssef/New"
    # Au cas où les fichiers existeraient déjà
    rm -f fullname.txt firstname.txt lastname.txt iduser.text path.txt
    # Parcourir la répertoire
    for entry in "${path}"/*
    do
      entry=${entry##*/} 
      # Mettre "nom prénom" dans file.txt
      echo "${entry}" >> fullname.txt
      #position de l'espace entre le nom et le prénom
      posespace=`expr index "$entry" " "` 
      # Mettre "Prenom" dans file1.txt
      echo ${entry:0:$((posespace-1))} >> firstname.txt
      # Mettre "Nom" dans file2.txt
      echo ${entry:$((posespace-1))} >> lastname.txt
    done
    Résolu !

    Merci à vous

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    KISS*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for f in "$chemin"/*\ *
    do
       if test -f "$f"
       then
          filename="${f##*/}"
          echo "${filename% *}" > fic1
          echo "${filename##* }" >fic2
       fi
    done
    si je ne me suis pas trompé.

    --
    * Keep It Simple Stupid!
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Extraire les valeurs par défaut de champs dans une table
    Par Tazzou dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/03/2017, 21h09
  2. Extraire les noms de fichiers dans une arborescence
    Par dalila15 dans le forum Général Java
    Réponses: 5
    Dernier message: 12/02/2017, 17h15
  3. Extraire les données d'un fichier HDF dans une zone géographique
    Par Juliendu92 dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 24/02/2015, 14h28
  4. Colorer les mots clé d'un langage dans une zone de texte
    Par dark_geek dans le forum Langage
    Réponses: 5
    Dernier message: 22/01/2010, 23h35
  5. [Dojo] Afficher les sous elements d'un dossier dans une tree
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 18/09/2009, 00h03

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