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 Lol Zimmerli (site web personnel, Mastodon) . Évalué à 2.
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 vitcz . Évalué à 1.
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 . Évalué à 6.
=> 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 . Évalué à 1.
[^] # Re: plein de trucs
Posté par vitcz . Évalué à 1.
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 . Évalué à 2.
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 . Évalué à 7.
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 . Évalué à 1.
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.