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 :

Comment compter le nombre de fichiers dans un répertoire et la taille


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Par défaut Comment compter le nombre de fichiers dans un répertoire et la taille
    Bonjour,

    Je souhaiterais créer un script en shell pour compter le nombre de fichier dans un répertoire, et la taille du répertoire contenant les fichiers.

    Je souhaiterais obtenir une architecture qui ressemble à cela: Quand j’exécute le script

    Information :Sachant que j'ai des répertoires du type: old - name linux ne reconnait pas écrit de cette façon faudrait convertir.

    EXEMPLE:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dossier                                             nombre de fichiers          Taille (ko,mo;go)
     
    /répertoire1/repertoire2/repertoire3          12                             100
    /répertoire1/repertoire2/repertoire4          10                             110
    /répertoire1/repertoire2/repertoire5          16                             120
     
    /répertoire1/repertoire2/old - name         12                             100
    ...etc


    Merci de m'aider,


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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour,

    Voici pour commencer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ find . -type f |sed 's@\([^/]*\)$@ \1@'|awk '{a[$1]++} END{for (i in a) print i,a[i]}'
    En ce qui concerne la taille, ya plus qu'à étudier les options de find par un Bonne chance

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zara5 Voir le message
    et la taille du répertoire contenant les fichiers.
    Bonjour

    Qu'entends-tu exactement par "taille du répertoire" ??? Est-ce que tu considères que la taille du répertoire est égale à la somme des tailles des fichiers qui y sont contenus ou bien tu veux juste parler de l'espace utilisé pour stocker les noms des fichiers (un répertoire n'est en fait qu'un tableau à 2 colonnes contenant le nom du fichier et son n° d'inode)...???
    Et comment compteras-tu un dossier qui contient 3 sous-dossiers ? Les 3 sous-dossiers seront-ils comptabilisés comme 3 fichiers (dans l'absolu un dossier est bien un fichier donc ce serait cohérent) ou bien tu ne veux comptabiliser que les "vrais" fichiers (ce qu'on appelle "fichier régulier") ???

    A titre d'exemple, voici un petit script de base qui comptabilise le nombre d'items d'un répertoire passé en argument et qui cumule la taille de chaque item quand ceux-ci sont des fichiers réguliers
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh
     
    for dir in $*
    do
    	tot=0
    	sum=0
    	for f in "$dir"/*
    	do
    		test -f "$f" && tot=$(expr $tot + $(cat "$f" |wc -c))
    		sum=$(expr $sum + 1)
    	done
    	echo "$dir $sum $tot $(expr $tot / 1000) $(expr $tot / 1000000)"
    done

    Ceci dit, tu devrais aussi t'intéresser à la commande "tree", surtout agrémenté de l'option h (affiche la taille)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Par défaut Merci de vos réponses
    Je vous remercie de m'avoir répondu,

    J'ai pu avancé grâce à vous.

    J'ai trouvé une commande qui me convient mais malheureusement, j'ai un petit soucis avec des dossiers qui sont nommé de cette façon: old - name

    Quand je lance la commande j'ai l'erreur Aucun fichier ou dossier de ce type.
    Mais pour les autres fichiers sa fonctionnes correctement.

    Comment faire en sorte que la commande reconnait ces caractères ?

    Voici la commande:

    #Nombre de fichiers

    for dossier in `find /mnt/répertoire -maxdepth 1 -type d` ; do NBF=`find $dossier -type f -name \* | wc -l`; echo $dossier: $NBF; done


    Merci bcp;

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    essayes déjà de proteger tes variables des interpretations
    avec ${variable} ou "$variable"

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Par défaut
    Salut,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for dossier in `find /mnt/info-igbmc -maxdepth 1 -type d` ; do NBF=`find ${dossier} -type f -name \* | wc -l`; echo ${dossier}: ${NBF}; done
    J'ai essayé Sa fonctionne toujours pas.

    Avez-vous une autre idée.

    Merci,



  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frp31 Voir le message
    essayes déjà de proteger tes variables des interpretations
    avec ${variable} ou "$variable"
    ${variable} sert juste à isoler le nom de la variable quand celui-ci peut porter à confusion
    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var=10
    echo "j'ai couru ${var}km"     # Pour éviter que le shell tente d'afficher la variable "$varkm"...

    "$variable" est mieux pensé. Surtout si variable contient un truc style "hello world" (avec un espace) ou mieux, si la variable ne contient rien du tout => test $variable = "" ne fonctionnera pas mais test "$variable" = "" fonctionnera. Malheureusement, comme l'a souligné N_Bah, le problème vient du for qui coupe les items sur l'espace donc bien en amont du traitement de la variable...

    Citation Envoyé par zara5 Voir le message
    Quand je lance la commande j'ai l'erreur Aucun fichier ou dossier de ce type.

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for dossier in `find /mnt/répertoire -maxdepth 1 -type d` ; do NBF=`find $dossier -type f -name \* | wc -l`; echo $dossier: $NBF; done
    Déjà tu peux enlever l'option "-name \*". Si tu ne cherches pas spécialement de nom particulier, le find te donnera tous les noms qu'il trouve.

    Mais sinon ton vrai problème c'est que for coupe les items sur l'espace. Et donc si tu as un dossier nommé "xxx yyy" le for cherchera à traiter "xxx" puis "yyy" bien entendu sans succès puisqu'aucun de ces dossiers n'existe...

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    find /mnt/répertoire -maxdepth 1 -type d |while read dossier
    do
        echo "$dossier: `find "$dossier" -type f | wc -l`"
    done
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 44
    Par défaut Merci à tous de votre aide
    Merci, Frédéric grâce vous j'ai pu résoudre mon problème.

    Je Remercie aussi l'équipe du forum.

    Je vous souhaite un bon W-E


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

Discussions similaires

  1. Réponses: 16
    Dernier message: 26/11/2008, 16h41
  2. Réponses: 1
    Dernier message: 19/06/2008, 17h28
  3. Réponses: 1
    Dernier message: 30/10/2007, 00h07
  4. compter le nombre de fichiers dans un répertoire !
    Par lehic dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 20/11/2005, 17h59
  5. Réponses: 6
    Dernier message: 11/02/2005, 06h41

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