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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 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 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
    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 averti
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 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

  4. #4
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 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

  5. #5
    Expert confirmé

    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
    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 }'

  6. #6
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 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 ?

  7. #7
    Membre éprouvé 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
    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.

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

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