Forum Programmation.shell test sur la taille d'un fichier

Posté par  .
Étiquettes : aucune
0
31
juil.
2008

bonjour a tous,

je redige un script bash qui envoi en ftp un fichier d'archive. J'aimerais que la taille de ce fichier soit testé avant l'envoi de façon a ce que l'envoi se fasse ssi le fichier est inférieur a 100Mo voici mon code...qui ne marche pas :


#debut du script

taille=$(du -sh $filename1.tar.gz)

if (($taille <= 100)); then

ftp 000.00.00.00 <<"EOF"
bin
cd REP
send $filename1.tar.gz
quit
bye
"EOF"

echo "l'envoi a été effecté"

else
echo "le fichier est trop volumineux, merci de supprimer des fichier de l'archive"

exit 1
fi;

#fin du scirpt


le script d'envoi en ftp fonctionne, c'est le tgest sur la taille qui me pose un probleme.

merci pour votre aide
  • # Question à $1

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    Pourquoi $filename1 et pas filename1? D'où vient cette variable?

    Sinon, si tu fais
    du -sh filename1.tar.gz
    Est-ce que la valeur retournée est un entier? Je ne crois pas!

    La gelée de coings est une chose à ne pas avaler de travers.

    • [^] # Re: Question à $1

      Posté par  . Évalué à 1.

      effectivement : du -sh renvoi une valeur du type nMo donc pas un entier, ce qui rend les comparatifs arythmétique impossible....
      c'est lça mon problème.... essentielle.

      J'ai abandonné -h car sans interet mais j'ai le mesage d'erreur suivant : value too great for base (error token is "$filename.tar.gz"

      J'ai mis une variable pour ne pas avoir a tout modifier si le nom du fichier change.
  • # plein de trucs

    Posté par  . Évalué à 6.

    #!/bin/sh

    => ne pas oublier l'interpreteur

    du -sm tonfic |awk '{print $1}'

    => man du

    if [ "$taille" -lt "100" ]; then

    => man bash
    • [^] # Re: plein de trucs

      Posté par  . Évalué à 1.

      ca marche bien, merci bcp
      • [^] # Re: plein de trucs

        Posté par  . Évalué à 1.

        Bonjour et encore merci pour votre aide :

        J'ai toujours un soucis avec ma boucle, ca rle fichier est envoyé quelle que soit sa taille :

        voici mon script qui intègre ta syntaxe :


        #debut du script

        taille=$(du -sm $filename1.tar.gz |awk '{print $1}')

        if [ "$taille" -lt "100" ]; then

        ftp $hostftp <<EOF
        bin
        cd $dossierftp
        send $filename1.tar.gz
        quit
        bye
        EOF
        echo "le fichier a été envoyé"
        else
        echo "le fichier est trop lourd, merci de supprimer des fichiers"
        exit;
        fi;

        #fin de script
        • [^] # Re: plein de trucs

          Posté par  . Évalué à 2.

          Chez moi ton script semble fonctionner, mais je pense que le problème peut venir de ta syntaxe if [ "$taille" -lt "100" ] : essaye en supprimant les guillemets (peut-être qu'il bascule sur une comparaison de chaîne au lieu d'une comparaison de valeurs numériques).


          Sinon, plutôt que de faire un ftp avec un <<EOF, essaye les outils non-interactifs dédiés, comme ncftpput ou wput, ce sera plus robuste.
  • # stat

    Posté par  . Évalué à 7.

    Tiens, je n'avais jamais pensé à du pour avoir la taille d'un fichier :) j'ai trop en tête de l'appliquer seulement à des répertoires...

    Le plus propre est probablement la commande stat. Associée à l'option '-c/--format/--printf elle peut afficher tout ce que tu veux simplement. Pour la taille en octets, ce sera:
    stat -c "%s" $tonfichier

    Normalement c'est équivalent, sauf dans le cas tordu des fichiers à trou (sparse files) où stat te donnera la taille apparente (la meme que celle donnée par ls), alors que DU te donne l'espace physique effectif sur disque (qui sera plus petit). Un fois transmis par FTP ce sera effectivement la taille apparente qui sera occupée. (Mais à moins d'envoyer des core-dump pas gzippé, ça ne devrait absolument pas te concerner).

    l'option --format n'est semble-t-il pas partout reconnue, au pire tu peux faire un LS est prendre le champ taille:
    /bin/ls -l -- $fichier | awk '{print $5 }
    • [^] # Re: stat

      Posté par  . Évalué à 1.

      Bonjour,

      je vais également essayé avec ta syntaxe, je suis curieux de voir les différences éventuelles de comportement.

      Aurais tu une idée pour le problème lié à mon script ?
      Il est censée envoyé l'archive si et seulement si son poid est inférieur a 100Mo

      merci

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.