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 :

Calcul espace disque de fichier spécifique (après find)


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut Calcul espace disque de fichier spécifique (après find)
    Je dois réaliser un script me permettant de compter le nombre de sous dossiers et de fichiers à l'intérieur d'un même dossier et afficher ensuite leur taille (uniquement pour les fichiers).

    Pour ce qui est du comptage des sous-dossiers et fichiers j'y suis parvenu, mais je n'arrive pas a afficher correctement l'espace disque occupé.

    Je vais essayer de simplifier pour que ce soit plus clair:

    J'ai un dossier "/var/www/http/xxx" contenant un sous répertoire "/var/www/http/xxx/yyy" et plusieurs fichiers:

    -test.java
    -test.php
    -test.mp3

    Le sous répertoire "/var/www/http/xxx/yyy" contient lui même :
    -test2.php
    -test2.mp3

    Je recherche uniquement les fichiers n’étant pas .php ou .java.

    Je fais donc un find /var/www/http/xxx -type f ! -iname "*.php" -a ! -iname "*.java" qui me renvoie comme résultat :

    /var/www/http/xxx/test.mp3
    /var/www/http/xxx/yyy/test2.mp3
    Ce que je voudrais c'est connaitre l'espace disque utilisé par ces deux fichiers et UNIQUEMENT ces deux fichiers.

    J'ai essayé de décomposer en 2 parties : une première variable contenant les noms des fichiers correspondant à ma recherche (variable1=`find /var/www/http/xxx -type f ! -iname "*.php" -a ! -iname "*.java"`)

    Puis un du -bch sur cette précédente variable, cela marche mais uniquement lorsque ma recherche a retourné un résultat, si aucun fichier correspondant à mes critères n'est trouvé, cela exécute un du -bch sur le dossier dans lequel je me trouve (ce qui ne m’intéresse pas du tout).

    On m'a parlé de l'option -exec à placer dans la commande find mais je ne trouve cependant pas la bonne syntaxe.

    J’espère que vous pourrez m'aider.

    Je vous en remercie d'avance.

  2. #2
    Expert éminent sénior 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 : 47
    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
    Points : 12 262
    Points
    12 262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /var/www/http/xxx -type f ! -iname "*.php" -a ! -iname "*.java" | xargs ls -l | awk '{print $5}'
    tu y étais presque pourquoi tu t'es arreté là .... ce que tu cherchais c'était juste le "| xargs autrecommande"

  3. #3
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Tu as essayé un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read
    do
        echo $REPLY
    done < <(find ...)
    à chaque tour de la boucle, $REPLY contient un chemin de fichier. Si il n'y a pas de fichier, il ne devrait rien se passer.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Lorsque j’exécute ta commande, j'obtiens un résultat du type :

    4096
    4096
    4096
    4096

    Pourrais-tu me la décomposer et me la détailler pour que je puisse l'adapter à mes besoins ?

    PS: J'ai oublié de préciser que le résultat doit être l'addition des tailles de tous les fichiers correspondants

    Merci

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Pour frp31:

    Cela ne semble pas correpondre a mes attentes, en effet la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /var/www/http/xxx -type f ! -iname "*.php" -a ! -iname "*.java" | xargs ls -l
    me donne exactement le meme resultat qu'un

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /var/www/http/xxx -type f ! -iname "*.php" -a ! -iname "*.java" -exec du {} \; | awk '{ SUM += $1} END { print SUM }'

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Un grand merci à toi zipe31.

    Cependant est ce possible d'afficher le resultat avec l'unité (k, m, g)
    comme le ferait l'option -h de la commande du ?

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

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

    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sizes=( $(find /var/www/http/xxx -type f ! -iname "*.php" -a ! -iname "*.java" -printf "%s\n") )
    (( sizes )) && (IFS=+; printf '%d octets\n' $(( ${sizes[*]} )) )

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Merci N_BaH.

    Mais n'est ce pas possible d'afficher le resultat de la commande dans un format plus lisible ? de type 1Go au lieu de 1 073 741 824 octets ?.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Points : 146
    Points
    146
    Par défaut
    Bonjour,

    si tu as la commande stat et bash >=4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    size=$(( $(shopt -s globstar extglob; stat -c '+%s' /var/www/http/xxx/**/!(*.php|*.java)) ))
    awk ' { printf "%.10f Gb\n", $1/(1024*1024*1024) } ' <<< ${size}

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Merci, je vais tester ca.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Il me semble qu'il manque une parenthese quelque part, je la rajoute ou?

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Points : 146
    Points
    146
    Par défaut
    c'est corrigé.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    J'obtiens ce message d'erreur

    ./taille2: command substitution: line 3: syntax error near unexpected token `('
    ./taille2: command substitution: line 3: `shopt -s globstar extglob; stat -c '+%s' /var/java/dev2/**/!(*.php|*.java)'


    Merci de ton aide.

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 44
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par Chochal Voir le message
    J'obtiens ce message d'erreur

    ./taille2: command substitution: line 3: syntax error near unexpected token `('
    ./taille2: command substitution: line 3: `shopt -s globstar extglob; stat -c '+%s' /var/java/dev2/**/!(*.php|*.java)'


    Merci de ton aide.

    arg, désolé ... je suis allé un peu vite en besogne
    l'option extglob n'est pas considérée active au moment de la lecture de la ligne et cela génère donc cette erreur de syntaxe. Il faut donc sortir l'activation de l'option :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    shopt -s globstar extglob
    size=$(( $(stat -c '+%s' /var/www/http/**/!(*.php|*.java) 2>/dev/null) ))
    awk ' { printf "%.10f Gb\n", $1/(1024*1024*1024) } ' <<< ${size}

  16. #16
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    J'ai encore un message d'erreur.

    bash: ./taille2: /bin/bash^M: bad interpreter: Aucun fichier ou répertoire de ce type

    Merci pour ton aide.

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

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

    ouaip, ça c'est parce que tu as écrit ton script sur Windows, il faut le convertir au format UNIX.

  18. #18
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup,

    cela semble fonctionner mais j''obtiens tout de meme un message d'erreur:

    ./taille2: line 3: shopt: globstar: invalid shell option name

    0.0003870251 Gb

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    t'es pas en BASH >=4 ?
    dans un terminal, que répond echo $BASH_VERSION ?

  20. #20
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Ceci:

    3.2.39(1)-release

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/08/2011, 17h42
  2. ASP+ calcule espace disque
    Par zaki_1982 dans le forum ASP
    Réponses: 1
    Dernier message: 11/02/2010, 21h52
  3. Calcul d'espace disque
    Par Pwill dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 08/07/2005, 18h45
  4. Réponses: 4
    Dernier message: 31/08/2004, 18h11

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