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 :

[bash]test taille fichier ne marche pas sur tout les repertoires


Sujet :

Linux

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Points : 146
    Points
    146
    Par défaut [bash]test taille fichier ne marche pas sur tout les repertoires
    Bonjour,
    je voudrais faire un script qui ne puisse pas faire un traitement s'il ya au moins un fichier vide dans le repertoire.
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for fichier in `ls $1`;do	
     if [ -s $fichier ] ; then echo "le fichier n'est pas vide" 
     else echo "le fichier est vide"
     fi
    done
    Le probleme c'est que ce script ne marche pas sur tout les repertoires, je n'y comprends rien.
    Pour tester ce script j'ai donc creer un repertoire avec des fichiers vides avec la commande touch, puis j'ajoute du texte.
    sur le premier test cela a marché il trouve les fichiers vides et les non vides.
    Puis j'ai refais le test dans un autre repertoire, et la il me trouve toujours des fichier vides.
    Je n'arrive pas a savoir d'ou vient le probleme.
    Merci.
    Va vers ton risque, à te regarder ils s'habitueront.

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Affiche la valeur de fichier.
    Ajoute des "" autour de fichier dans le -s.
    Ce serait pas une histoire de blancs dans les noms... Essaie de deviner en fonction des repertoires qui ne marchent pas (ou donne des exemples)

  3. #3
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Ignorer les répertoires, les liens... ( tout ce qui n'est pas fichier )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for fichier in `ls $1`;do	
      if [ ! -f $fichier ] ; then 
        continue
      fi  
      if [ -s $fichier ] ; then 
        echo "le fichier \"$fichier\" n'est pas vide" 
      else 
        echo "le fichier \"$fichier\" est vide"
     fi
    done
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Points : 146
    Points
    146
    Par défaut
    Merci pour vos reponses.
    Mais j'ai toujours le meme probleme.
    J'ai rajouté les "" mais rien a faire.
    j'ai mis le code de BlaireauOne mais c'est toujours pareil
    pour tester cet exemple voici la procedure.
    1)J'ai creer un repertoire, et dedans j'ai fais un touch de plusieurs fichiers
    2) je fais un ls -l et j'ai bien la taille des fichiers a 0
    3) je fais un vi sur 3 fichier et j'ajoute des characteres
    donc 2 fichiers vide et 3 fichiers plein

    j'execute le script
    et j'obtiens sur les 5 fichier present dans le repertoire
    2 fichiers qui "existe" :
    le premier qui est vide avec la commande ls -l et qui n'a rien comme contenu
    devient "n'est pas vide" comme resultat du sh
    le deuxieme qui n'est pas vide.... deviens "vide" comme resultat
    et les 3 autres n'existe pas pour le script.

    Je n'y comprends vraiment rien.
    J'espere que je vous donne assez de details pour voir d'ou peut venir le probleme.
    Merci.
    Va vers ton risque, à te regarder ils s'habitueront.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    quelque chose m'étonne à la lecture du script : ta variable fichier contient le résultat d'un ls sur un nom de répertoire. Donc, tu récupères uniquement le nom du fichier sans le nom du répertoire.

    Ton test sur la taille du fichier ne va donc réussir que si dans le répertoire courant il existe un fichier de même nom que dans le répertoire fourni en argument à ton script, et que ce fichier (du répertoire courant donc) est vide.

    En gros, si l'argument à ton script est autre chose que '.' (le point, pour le répertoire courant), les résultats sont assez imprévisibles (et donc réciproquement, ton script doit donner le résultat attendu si l'argument est '.').

    Me trompé-je ?

    MarkH

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Points : 146
    Points
    146
    Par défaut
    j'ai pas bien compris, mais la reponse doit etre peut etre la.
    en effet en parametre je donne le repertoire absolue
    du style ; /usr/home/repertoireTraitement.
    qu'est ce que je dois mettre a la place?
    Va vers ton risque, à te regarder ils s'habitueront.

  7. #7
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut
    Yop,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for fichier in `ls $1`;do	
      if [ ! -f $1/$fichier ] ; then 
        continue
      fi  
      if [ -s $1/$fichier ] ; then 
        echo "le fichier \"$1/$fichier\" n'est pas vide" 
      else 
        echo "le fichier \"$1/$fichier\" est vide"
     fi
    done
    essaies stp avec cette verison du code de BlaireauOne
    @++

    F-k-z
    GNU/Linux c'est une question de VI ou de MORE.
    http://www.goodbye-microsoft.com
    "Linux is user friendly, its just very selective of its friends*", m'enfou, je suis son pote :p

    Un post vous est utile ou est constructif, ayez le réflexe du +1 pour le contributeur ( C'est gratuit et ça donne l'impression d'être utile :p )
    Le tag et la ne sont pas fait que pour le décor, pensez-y !
    R.I.P. F-k-z 13/06/2006 - 12/10/2011
    *Linux est convivial, il est juste très sélectifs pour ses amis.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Points : 146
    Points
    146
    Par défaut
    Merci beaucoup.
    Va vers ton risque, à te regarder ils s'habitueront.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Bien, et maintenant la solution élégante

    Pour avoir la liste des fichiers vides, il vaut mieux utiliser find, comme ça tu te débarrasses du if, et en plus tu récupères les noms des fichiers avec les chemins.

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fichiers=`find $1 -not -empty`
    for fichier in fichiers; do
       echo "$fichier n'est pas vide"
    done
    Evidemment, pour avoir les fichiers vide, il suffit d'enlever le -not

    Demain j'arrête d'être pédant

    MarkH

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

Discussions similaires

  1. Géolocalisation ne marche pas sur tous les mobiles
    Par souhir1987 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/11/2014, 23h30
  2. [MySQL] Une requête qui ne marche pas sur tous les enregistrements
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/04/2010, 13h20
  3. Réponses: 2
    Dernier message: 04/08/2009, 09h55
  4. .bat qui ne marche pas sur tout les postes
    Par guismoman33 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 06/08/2008, 11h52
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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