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

Linux Discussion :

Manipulation de fichiers - gestion d'extensions


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Manipulation de fichiers - gestion d'extensions
    Bonjour,

    Je cherche à faire des stats à partir de fichiers présents dans un dossier, en effet je voudrais pouvoir énumérer le nombre de fichiers d'extesnion un tel...

    La premiere chose serait de lister l'ensemble des extensions, puis dans un 2eme temps chiffrer ce regroupement, du style:

    avi:9
    bmp:14
    sql:25
    Merci!

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    oui.. mais comment feras tu quand il y a des extensions doubles, comme .tar.gz ?

    Sans oublier que sous Linux les fichiers n'ont pas necessairement d'extensions

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    ça ne fait rien, ce seront tjs des extensions simples.

  4. #4
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Tu peux faire system("ls > ext").
    Cette commande va te lister tous les fichiers en en mettant un par ligne.
    Ensuite tu ouvres le fichier ext en lecture et tu récupères les chaînes de caractères.
    Après c'est plus que des trucs chiants pour parcourir la chaîne et faire des vérifs (s'il y a bien un point dans le nom du fichier, ...).
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    j'ai une erreur avec ta commande

    ca me met :
    syntax error near unexpected token

  6. #6
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Voici un script shell que je viens de faire :
    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
     
    #! /bin/sh
     
    list_rep()
    {
        stock_type=""
        total_files=0
        other_files=0
        for file in `ls $1` ; do
            total_files=`expr $total_files + 1`
            other_files=`expr $other_files + 1`
            if [[ "$file" == *.* ]] ; then
                value=`echo $file | sed 's/.*\.\(.*\)/\\1/'`
                retour=`echo $stock_type | awk "{ for (nb = 1; nb <= NF; nb++) { if ( \"$value\" == \\$nb ) { print \\$nb } } }"`
                if [ -z "$retour" ] ; then
                    stock_type="$stock_type $value"
                    eval $value=0
                fi
                eval $value=`eval expr $\`echo $value\` + 1`
                other_files=`expr $other_files - 1`
            fi
        done
        echo "$1    ==> TOTAL : $total_files"
        for extension in `echo $stock_type` ; do
             number=`eval echo $\`echo $extension\``
             echo "$extension ==> $number"
        done
        echo "Other FILES ==> $other_files"
    }
     
    list_rep "."
    Il n'est pas parfait. Pour gerer des extensions plus complexe comme .tar.gz, il suffit d'ameliorer l'expression dans le sed. Je te laisse faire .

    Sinon pour arriver a gerer les extensions sans l'avoir dans le nom, tu peux en utilisant la commande file. Mais il y a le probleme du formatage de retour. Donc il est dur d'identifier simplement un format.

    Voila.

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Salut nyal

    Est ce que ca revient au meme de mettre
    #! /bin/sh
    et
    #! /bin/bash

    ?

    parce que quand je tape sh dans la console.. j'utilise quand meme le shell bash

  8. #8
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Ca depend de ta configuration. Sous slackware (Je sais que tu es sous slack . Ca depend des slackware aussi ), sh est un lien vers bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lrwxrwxrwx    1 root     root            4 May 31 16:46 /bin/sh -> bash*
    Mais ce n'est pas le cas sur tout les Unix.
    Donc dans ton cas, cela revient au meme. Sinon l'intepretateur sh est utilise et le systeme de scripting n'est pas le meme (Il y a des differences).
    Donc si tu mets une shebang :
    En pensant utiliser bash, il ne faut pas. Il faut mettre bash pour eviter les confusions. (Bon tu peux tres bien faire un script compatible pour les deux mais c'est donc un script de type sh).

    J'espere que c'est clair

  9. #9
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    ah ok, merci pour tes explications nyal

    ps : là je suis actuellement sous Mandrake 9.1.. j'avais installé la Slackware pour tester plusieurs distributions

  10. #10
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    La fonction se trouve dans la librairie stdlib.h.
    Je viens de la vérifier et ça marche correctement chez moi, essayes de voir si tu as bien mis les guillemets.
    Par contre, j'ai juste oublié un truc, si tu n'est pas dans le répertoire dans lequel tu veux faire la recherche, l'instruction nest pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("ls > ext");
    mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("ls /chemin > ext");
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Alors merci, ca marche si je fais un copier / coller dans la console et qu'apres je lance list_rep "." , mais pas quand je le met dans un script .sh, il me met:

    nb_par_ext2.sh: [[: not found
    et sinon j'essaie de mettre en argument le répertoire ou je veux effectuer l'action mais ça marche po...

  12. #12
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Voila une version corrige. je m'excuse. J'avais mis une syntax type bash.
    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                                                                                                      
     
    list_rep()
    {
        stock_type=""
        total_files=0
        other_files=0
        for file in `ls $1` ; do
            total_files=`expr $total_files + 1`
            other_files=`expr $other_files + 1`
            retour="`echo $file | awk '/\\.[!-}]*$/ {print }'`"
            if [ -n "$retour" ] ; then
                value=`echo $file | sed 's/.*\.\(.*\)/\\1/'`
                retour=`echo $stock_type | awk "{ for (nb = 1; nb <= NF; nb++) { if ( \"$value\" == \\$nb ) { print\
     \\$nb } } }"`
                if [ -z "$retour" ] ; then
                    stock_type="$stock_type $value"
                    eval $value=0
                fi
                eval $value=`eval expr $\`echo $value\` + 1`
                other_files=`expr $other_files - 1`
            fi
        done
        echo "$1    ==> TOTAL : $total_files"
        for extension in `echo $stock_type` ; do
             number=`eval echo $\`echo $extension\``
             echo "$extension ==> $number"
        done
        echo "Other FILES ==> $other_files"
    }
     
    list_rep "."
    Sinon il te suffisait de remplacer la shebang en mettant bash :
    le chemin peut etre different.

  13. #13
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par ulukai
    Alors merci, ca marche si je fais un copier / coller dans la console et qu'apres je lance list_rep "." , mais pas quand je le met dans un script .sh, il me met:

    nb_par_ext2.sh: [[: not found
    et sinon j'essaie de mettre en argument le répertoire ou je veux effectuer l'action mais ça marche po...
    Oups, j'ai oublié de préciser que c'était pas du scrpit sh mais du C (dsl).
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    OK merci pour vos réponses! Bye!

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

Discussions similaires

  1. [XL-2007] Manipulation de fichier texte d'extension personnalisée via VBA
    Par GOLDINGMAROC dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/12/2013, 12h16
  2. Peut-on manipuler un fichier excel depuis une extension FF
    Par GandalfZeGrey dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 08/12/2011, 00h32
  3. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  4. chemin de fichier et gestion d'extension
    Par lietof dans le forum Langage
    Réponses: 2
    Dernier message: 03/05/2006, 15h07
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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