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 :

Récupération du noms des fichiers dans un répertoire


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Récupération du noms des fichiers dans un répertoire
    Bonsoir,

    Débutant en linux, j'ai besoin de votre aide pour un petit problème que je n'ai pas réussi à trouver.

    Problem: J'ai un répertoire contenant des fichiers de formats différents (html, doc, etc). J'ai créé une fonction permettant de récupérer les données que j'aurai besoin. Pour l'instant aucun souci de ce coté. Cependant en sortie, la seule chose que je sais faire c'est que les résultats sont récupérés dans un fichier .txt.

    Ce que je voudrais (mais pas réussi), c'est de mettre les données récupérées dans un fichier .txt avec le nom du fichier de départ.

    Je m'explique:

    fichiers de départ: lolo.htm, lolo1.htm, lolo2.htm
    ==> fonction
    résultats de lolo.htm > lolo.txt
    résultats de lolo1.htm > lolo1.txt
    résultats de lolo2.htm > lolo.txt

    j'espère que j'ai bien expliqué. J'ai utilisé "echo $... > fichier.txt" mais sans résultats.

    Merci d'avance pour vos aides.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    pourrais-tu mettre ta fonction histoire de voir un peu plus clair?

    Merci d'avance,

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    voici ma petite fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/sh
    rep=/var/test/*
    result=md4List=/var/test/resultats.log
     
    #fonction
    recup_htm () {
                recupHref=$(cat $i | grep -i "href=")
                       }
     
    #récupération des données
    for i in `find $rep -type f -name ".htm"`  ; do
    recup_htm $i
    echo "$recupHref" >>$result
    done
    Pour l'instant mes résultats ne sont que dans le fichier "result".


    Voila petite fonction, cependant, dans le répertoire j'ai des fichiers en htm avec des noms différents. Je voudrais que ma fonction traite ces fichiers puis mettre les résultats correspondant au chacun de fichiers dans des fichiers .txt avec les noms des fichiers de départs.

    (départ: toto.htm, tata.htm, titi.htm => fonction => résultat de toto.htm dans "toto.txt", puis résultat de tata.htm.txt, puis résultat de titi.htm dans titi.txt).

    Merci pour votre aide


    Citation Envoyé par Mygale1978 Voir le message
    Salut,

    pourrais-tu mettre ta fonction histoire de voir un peu plus clair?

    Merci d'avance,

  4. #4
    Invité
    Invité(e)
    Par défaut
    Hello,

    Voici une suggestion

    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
    24
     
    #!/bin/sh
     
    source_path='/var/test/'
    target_path='/var/dest/'
     
    #fonction
    recup_htm () {
    sourceExt='.htm'
    #extension pour le fichier résultat
    targetExt='.txt'
     
    #Je suppose que tous tes fichiers ont la structure "nom.ext"
    #Je récupère le nom du fichier sans l'extension
    fileName=$(basename $1 $sourceExt)
     
    #Je traite le résultat et je le redirige vers le fichier résultat de même nom
    grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
    }
     
    #récupération des données
    for file in `find ${source_path} -type f -name "*.htm"` ; do
    recup_htm ${file}
    done
    Dernière modification par Invité ; 03/08/2008 à 01h47.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    salut,

    je teste ca tout de suite, merci encore


    Citation Envoyé par Mygale1978 Voir le message
    Hello,

    Voici une suggestion

    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
    24
    25
     
    #!/bin/sh
     
    source_path='/var/test/'
    target_path='/var/dest/'
     
    #fonction
    recup_htm () {
     
    sourceExt='.htm'
    #extension pour le fichier résultat
    targetExt='.txt'
     
    #Je suppose que tous tes fichiers ont la structure "nom.ext"
    #Je récupère le nom du fichier sans l'extension
    fileName=$(basename $1 $sourceExt)
     
    #Je traite le résultat et je le redirige vers le fichier résultat de même nom
    grep -i "href=" $1 > ${source_path}${fileName}${targetExt}
    }
     
    #récupération des données
    for file in `find ${source_path} -type f -name "*.htm"` ; do
    recup_htm ${source_path}${file}
    done

  6. #6
    Invité
    Invité(e)
    Par défaut
    Hello,

    une petite erreur dans le script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    recup_htm ${source_path}${file}
    doit être remplacé par


  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Desolé, c'est peut-etre idiot comme question, mais je ne vois pas à quel moment tu utilises la variable $target_path. Pourrais tu m'éclairer ?


    Citation Envoyé par Mygale1978 Voir le message
    Hello,

    une petite erreur dans le script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    recup_htm ${source_path}${file}
    doit être remplacé par


  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui sorry autre petite erreur

    Enfin ça n'a pas trop d'impact étant donné que si tu utilises source_path tes fichiers d'origine et résultat seront placés dans le même répertoire.
    J'avais utilisé la variable $target_path au cas où tu aurais eu envie de mettre les fichiers résultats à un autre endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep -i "href=" $1 > ${source_path}${fileName}${targetExt}
    doit être remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep -i "href=" $1 > ${target_path}${fileName}${targetExt}

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci , j'ai pensé à ca aussi. J'ai testé mais ca n'a pas marché, ca m'indique : cat "Aucun fichier ou dossier de ce typetest/"

    J'ai vérifié par tout, les fichiers htm sont bien à l'intérieur du dossier /test, je ne comprends pas d'ou vient cet erreur.


    Ensuite pour la récupération du nom de fichier sans extension, ca n'a pas bien marché aussi, il récupère seulement ".htm" et non pas "toto"


    Citation Envoyé par Mygale1978 Voir le message
    Oui sorry autre petite erreur

    Enfin ça n'a pas trop d'impact étant donné que si tu utilises source_path tes fichiers d'origine et résultat seront placés dans le même répertoire.
    J'avais utilisé la variable $target_path au cas où tu aurais eu envie de mettre les fichiers résultats à un autre endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep -i "href=" $1 > ${source_path}${fileName}${targetExt}
    doit être remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grep -i "href=" $1 > ${target_path}${fileName}${targetExt}

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tulipelover Voir le message
    Merci , j'ai pensé à ca aussi. J'ai testé mais ca n'a pas marché, ca m'indique : cat "Aucun fichier ou dossier de ce typetest/"

    J'ai vérifié par tout, les fichiers htm sont bien à l'intérieur du dossier /test, je ne comprends pas d'ou vient cet erreur.


    Ensuite pour la récupération du nom de fichier sans extension, ca n'a pas bien marché aussi, il récupère seulement ".htm" et non pas "toto"
    l'erreur signifie simplement qu'il ne trouve pas le fichier ou répertoire.

    concernant les fichiers sans extension c'est normal car j'ai bien spécifié dans mon script que je supposais que ton fichier avait la structure "nom.ext"

    Pourrais-tu recoller ton script stp?

  11. #11
    Invité
    Invité(e)
    Par défaut
    J'ai modifié le script pour qu'il prenne en compte les fichiers sans extension.


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #!/bin/sh
     
    source_path='/root/test/'
    target_path='/root/test/'
     
     
    #fonction
    recup_file () {
    #echo $1
    sourceExt="$2"
    #extension pour le fichier résultat
    targetExt="$3"
     
    #Je suppose que tous tes fichiers ont la structure "nom.ext"
    #Je récupère le nom du fichier sans l'extension
    fileName=$(basename $1 $sourceExt)
     
    #Je traite le résultat et je le redirige vers le fichier résultat de même nom
    grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
    }
     
    #récupération des données pour les fichiers htm
    for file in `find ${source_path} -type f -name "*.htm"` ; do
    recup_file ${file} '.htm' '.txt'
    done
     
     
    #récupération des données pour les fichiers sans extension
    for file in `find ${source_path} -type f | grep -v ".*\..*"` ; do
    recup_file ${file} '' '.txt'
    #echo $file
    done

    Test:

    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
    24
    25
    26
     
    [root@intranet test]# ls -l
    total 16
    -rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
    -rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
    -rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
    -rw-r--r--  1 root root   0 aoû  3 17:32 tata
    -rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
    -rw-r--r--  1 root root   0 aoû  3 17:32 titi
    -rw-r--r--  1 root root   0 aoû  3 17:32 toto
    [root@intranet test]# ./test.sh
    [root@intranet test]# ls -l
    total 28
    -rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
    -rw-r--r--  1 root root   6 aoû  3 17:48 index1.txt
    -rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
    -rw-r--r--  1 root root   6 aoû  3 17:48 index2.txt
    -rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
    -rw-r--r--  1 root root   6 aoû  3 17:48 index3.txt
    -rw-r--r--  1 root root   0 aoû  3 17:32 tata
    -rw-r--r--  1 root root   0 aoû  3 17:48 tata.txt
    -rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
    -rw-r--r--  1 root root   0 aoû  3 17:32 titi
    -rw-r--r--  1 root root   0 aoû  3 17:48 titi.txt
    -rw-r--r--  1 root root   0 aoû  3 17:32 toto
    -rw-r--r--  1 root root   0 aoû  3 17:48 toto.txt
    Tu peux également faire des echos de tes variables pour voir ce qui est fait exactement au niveau du script

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    salut mygale,

    après avoir testé, ca fonctionne très bien, je te remercie bien, c sympa t'avoir rencontré.

    J'ai compris presque sauf la fonction basename. Mébon je chercherai pour comprendre pourquoi tu a écrit de cette manière.

    Merci, et bon w-e à toi.

    A bientôt

    Citation Envoyé par Mygale1978 Voir le message
    J'ai modifié le script pour qu'il prenne en compte les fichiers sans extension.


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #!/bin/sh
     
    source_path='/root/test/'
    target_path='/root/test/'
     
     
    #fonction
    recup_file () {
    #echo $1
    sourceExt="$2"
    #extension pour le fichier résultat
    targetExt="$3"
     
    #Je suppose que tous tes fichiers ont la structure "nom.ext"
    #Je récupère le nom du fichier sans l'extension
    fileName=$(basename $1 $sourceExt)
     
    #Je traite le résultat et je le redirige vers le fichier résultat de même nom
    grep -i "href=" $1 > ${target_path}${fileName}${targetExt}
    }
     
    #récupération des données pour les fichiers htm
    for file in `find ${source_path} -type f -name "*.htm"` ; do
    recup_file ${file} '.htm' '.txt'
    done
     
     
    #récupération des données pour les fichiers sans extension
    for file in `find ${source_path} -type f | grep -v ".*\..*"` ; do
    recup_file ${file} '' '.txt'
    #echo $file
    done

    Test:

    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
    24
    25
    26
     
    [root@intranet test]# ls -l
    total 16
    -rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
    -rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
    -rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
    -rw-r--r--  1 root root   0 aoû  3 17:32 tata
    -rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
    -rw-r--r--  1 root root   0 aoû  3 17:32 titi
    -rw-r--r--  1 root root   0 aoû  3 17:32 toto
    [root@intranet test]# ./test.sh
    [root@intranet test]# ls -l
    total 28
    -rw-r--r--  1 root root   6 aoû  3 01:15 index1.htm
    -rw-r--r--  1 root root   6 aoû  3 17:48 index1.txt
    -rw-r--r--  1 root root   6 aoû  3 01:15 index2.htm
    -rw-r--r--  1 root root   6 aoû  3 17:48 index2.txt
    -rw-r--r--  1 root root   6 aoû  3 01:15 index3.htm
    -rw-r--r--  1 root root   6 aoû  3 17:48 index3.txt
    -rw-r--r--  1 root root   0 aoû  3 17:32 tata
    -rw-r--r--  1 root root   0 aoû  3 17:48 tata.txt
    -rwxr-xr-x  1 root root 776 aoû  3 17:43 test.sh
    -rw-r--r--  1 root root   0 aoû  3 17:32 titi
    -rw-r--r--  1 root root   0 aoû  3 17:48 titi.txt
    -rw-r--r--  1 root root   0 aoû  3 17:32 toto
    -rw-r--r--  1 root root   0 aoû  3 17:48 toto.txt
    Tu peux également faire des echos de tes variables pour voir ce qui est fait exactement au niveau du script

  13. #13
    Invité
    Invité(e)
    Par défaut
    Salut,

    concernant la fonction basename tu pourras très facilement trouver son utilité sur google ou alors en faisant un man basename
    Je l'ai utilisé pour pouvoir récupérer uniquement le nom du fichier car sinon on a le chemin complet.

    exemple:


    Pour le fichier /root/test/toto, la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ basename /root/test/toto
    te retournera la valeur "toto"

    pour le chemin /root/test/index.htm, la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $basename /root/test/index.htm .htm
    te retournera "index" ainsi tu peux avoir le nom du fichier sans son extension et pouvoir lui associé une autre extension

Discussions similaires

  1. Récupération nom des fichiers dans un répertoire
    Par oliviernouhi dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2011, 14h21
  2. Réponses: 2
    Dernier message: 03/09/2008, 17h14
  3. lire le nom des fichiers dans un répertoire
    Par wonderboutin123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2007, 04h22
  4. Ecrire les noms des fichiers dans une colonne
    Par REGIMBAL dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 11h29
  5. rechercher d'un nom de fichier dans un répertoire
    Par yerome dans le forum Langage
    Réponses: 7
    Dernier message: 21/07/2005, 11h54

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