Retourner aux forums || Retourner au forum Programmation.shell

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

Posté par vitcz () le 31 juillet 2008
0
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

> Lire le message (8 commentaires, moyenne: 2,6).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

Question à $1

Posté par Lol Zimmerli (Jabber id, page perso, ) le 31/07/2008 à 16:46. (lien). É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!

--
En fait, Bernardo n'était pas muet; c'est Zorro qui était sourd.
  • [^]Re: Question à $1

    Posté par vitcz () le 31/07/2008 à 17:00. (lien). É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 Cereal Killer (Jabber id, ) le 31/07/2008 à 16:50. (lien). É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 vitcz () le 31/07/2008 à 17:52. (lien). Évalué à 1.

    ca marche bien, merci bcp

    • [^]Re: plein de trucs

      Posté par vitcz () le 01/08/2008 à 10:18. (lien). É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 daggett () le 05/08/2008 à 13:45. (lien). É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 daggett () le 31/07/2008 à 18:01. (lien). É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 vitcz () le 01/08/2008 à 10:21. (lien). É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

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell