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 :

Determiner la taille d'un ensemble de fichiers


Sujet :

Linux

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut Determiner la taille d'un ensemble de fichiers
    je fait un script qui determine la taille d'un ensemble de fichier dans un répertoire :
    tout se passe bien, mais dès fois si le chiffre calculé est important j'obtient un résultat négative (chiffre < 0) !
    voilà ou je suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    som=0
    for i in `ls -lrt FILENAME* | awk '{print $5}'` ; do som=`expr $i + $som` ; done
    echo $som
    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Regarde la commande du (disk usage).
    Elle devrais faire exactement ce que tu veux !

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    je sais pour la command :
    du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #du -sb FILENAME*
    300      FILENAME1
    400      FILENAME2
    500      FILENAME3
    elle donne la taille de chaque fichiers trouvés et non la somme TOTAL
    Merci

  4. #4
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    bonjour,
    Regarde le man et l'option -c

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    du -c donne le total !

    NAME
    du - estimate file space usage

    SYNOPSIS
    du [OPTION]... [FILE]...

    DESCRIPTION
    Summarize disk usage of each FILE, recursively for direc*
    tories.

    -a, --all
    write counts for all files, not just directories

    --block-size=SIZE use SIZE-byte blocks

    -b, --bytes
    print size in bytes

    -c, --total
    produce a grand total
    [...]

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    je suis sur HP-UX, l'option -c n'existe pas.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Mouarf !!!!!
    Dans ce cas, ça va être dur .... ton résultat deviens négatif car la variable utilisée doit-être un int signé. Du coup dès que ton premier bit (le poid le plus fort) passe à 1, tu te retrouve en négatif.

    Il n'y a pas a ma connaissance de moyen de déclarer une variable shell en unsigned int ...

    La je seche ... désolé :'( Un moyen serais d'écrire un pti prg ou script en C ou Python (ou PERL) qui fait ce que tu veux et de l'appeler dans ton script.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    ya bien une solution un peu barbare:

    tu travailles avec plusieurs variables

    une variable pour les octets, une pour les ko, une pour les mo et ainsi
    donc quand une depasse 1024, tu incremente la suivante et ainsi de suite

    ça deplace le pb de la taille mais tu peu reglé toi meme la taille maxi
    ça donnerai un truc du genre(a toi de remettre ds ton shell)

    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
     
    somo=0
    somko=0
    sommo=0
    for i in `ls -lrt FILENAME* | awk '{print $5}'` ; do som=`expr $i + $som` ; 
    si somo>1024 
      somo-=1024
      somko++
    finsi
    si somko>1024
      somko-=1024
      sommo++
    finsi
    .
    .
    .
    done
    echo $som
    ps: pas la peine de faire une variable pour les o, ko ,mo, go, etc, etc,... adapte a la precision de ta machine, certainement 32 ou 64bits

    ps2: sous linux:
    du -s donne le total pour chaque objet (rep ou fichier) sans indiquer les sous objet, ce qui permettrait d'accelerer ton truc pas mal

    ps3: zut pas possible elle est pas encore sorti( non pitié pas taper

  9. #9
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Citation Envoyé par getupa
    Il n'y a pas a ma connaissance de moyen de déclarer une variable shell en unsigned int ...
    En fait c'est un probleme tres epineux dans tous les langages... et ca rends les choses tres compliquees car il n'y a pas moyen de detecter un tel debordement (A moins de programer en assembleur mais bon ... )... Ca peut meme dans certains cas poser des failles de securites par debordement d'entier (Demander un nombre a l'utilisateur, faire un calcul avec celui-ci, allouer la taille calculee et y mettre ce que dit l'utilisateur). Enfin, ca reste marginal et est generalement inutilisable.

  10. #10
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Il mesemble que bc peut faire des calculs sans cegenre de problemes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    x=0
    for i in `du [Hh]* | awk '{print $1}'`
    do
      x="$x+$i"
    done
    echo $x | bc
    Un peu bourrin mais ca peut le faire (Si y'a bc )

  11. #11
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    on peut utiliser aussi expr pour lancer l'addition

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    x=0
    for i in `du [Hh]* | awk '{print $1}'`
    do
      x="$x+$i"
    done
    echo $x | bc
    ça marche si le résultat ne dépasse pas un certain nombre si non il y'aura un débordement (négative).
    meme chose pour l'utilisation de "expr".
    alors après qlq recherche voilà le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    som=0
    for i in `ls -lrt FILENAME* | awk '{print $5}'` ; do som=`echo $i+$TOT3|bc -l`;done
    echo $som
    ça marche.
    Merci

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    x=0
    for i in `du [Hh]* | awk '{print $1}'`
    do
      x="$x+$i"
    done
    echo $x | bc
    ça marche si le résultat ne dépasse pas un certain nombre si non il y'aura un débordement (négative).
    meme chose pour l'utilisation de "expr".
    alors après qlq recherche voilà le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    som=0
    for i in `ls -lrt FILENAME* | awk '{print $5}'` ; do som=`echo $i+$som|bc -l`;done
    echo $som
    ça marche.
    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2014, 20h39
  2. Réponses: 2
    Dernier message: 07/11/2009, 17h46
  3. Réponses: 4
    Dernier message: 16/07/2007, 17h33
  4. Find & replace sur un ensemble de fichiers
    Par totofweb dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 23/12/2005, 14h29
  5. Compresser et decompresser un ensemble de fichier
    Par Walm dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/01/2004, 16h23

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