Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : test sur la taille d'un fichier
Posté par vitcz () le 31 juillet 2008#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 scirptle 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).
Question à $1
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
#!/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
-
[^]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
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



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.