[bash]conditionner l'execution d'une commande à la taille d'un fichier

conditionner l'execution d'une commande à la taille d'un fichier [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-07-2003 à 22:25:43    

Bonjour tout le monde,
Je m'explique : pour les besoins d'un script de capture video temps réel j'ai besoin de lancer une commande dès qu'un fichier donné a atteint une taille voulue.
Vous voyez un moyen de faire ça ???
 
Merci beaucoup aux experts du bash.  :jap:


Message édité par jotenakis le 28-07-2003 à 22:26:18

---------------
Jotenakis
Reply

Marsh Posté le 28-07-2003 à 22:25:43   

Reply

Marsh Posté le 28-07-2003 à 22:39:52    

tu peux récupérer le résultat de find :
 
find . -name ton_nom_de_fichier -size +ta_taille_mini > /dev/null 2>&1 && echo "gagné"

Reply

Marsh Posté le 28-07-2003 à 23:09:35    

le problème c'est que c'est à controler en permanence (ou du moins très souvent...) car ce fichier grossit avec le temps...


---------------
Jotenakis
Reply

Marsh Posté le 28-07-2003 à 23:36:18    

c'est pas envisageable de faire un boucle qui ne fait rien tant quue la taille n'est pas atteinte ?
 
du style
 
while taille_du_fichier < taille_cible ;do rien ;done
 
le tout c'est de récupérer la taille du fichier et je ne connais pas de prog qui donne juste la taille
 
après quelques tatonnements ceci devrait fonctionner :
 
 

Code :
  1. while [ $(ls -s nom_de_fichier | sed s/\ nom_de_fichier//g -) -ge  ] ; do echo 1 > /dev/null ; done


Message édité par FlamM le 29-07-2003 à 00:28:10

---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 28-07-2003 à 23:56:52    

je vais essayé mais j'ai peur que ça bouffe du cpu une boucle infini comme ça...
 
Rq : pour récupérer la taille d'un fichier ça le fait comme ça --> a=$(ls -l monfic | awk '{print $5}')


---------------
Jotenakis
Reply

Marsh Posté le 29-07-2003 à 00:20:08    

en fait en faisant un sleep dans la boucle ça n'a pas l'air de bouffer trop de cpu :
 
 

while [ $(ls -s nom_de_fichier | sed s/\ nom_de_fichier//g -) -le taille_cible ] ; do sleep 1 ; done

 
 
et ça permet de tester la taille toutes les secondes


---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 29-07-2003 à 09:26:25    

Tu utilse cron pour qu il verifie de temps a autre la taille de tes fichier. S il depasse la taille maximum tu lance ton script dessus.
 
Le minimum pour cron ca doit etre toute les minutes

Reply

Marsh Posté le 29-07-2003 à 09:45:36    

merci bien...  :jap:


---------------
Jotenakis
Reply

Marsh Posté le 29-07-2003 à 10:37:27    

Amusant comme problème.
 
Voilà une solution :

Code :
  1. tail -f fichier | head -c 10000 &>/dev/null


 
Cette commande se termine lorsque le fichier contient plus de 10000 caractères.
 
Il faudrait rajouter un "stty raw" avant et un "stty -raw" après (ou équivalent, cf le man, le "raw" fait plein de choses) sinon tail attend d'avoir un saut de ligne pour envoyer les données :
 

Code :
  1. stty raw
  2. tail -f fichier | head -c 10000 &>/dev/null
  3. stty -raw


 
Il me semble qu'en prog système sous linux on ne peut pas lancer une commande dès qu'un fichier atteint une taille donnée donc il faudrait voir comment tail gère ça (sleep ?).

Reply

Marsh Posté le 29-07-2003 à 22:15:53    

ça marche nickel avec une boucle et un controle avec ls. Avec un sleep, ça consomme "keudal".


---------------
Jotenakis
Reply

Marsh Posté le 29-07-2003 à 22:15:53   

Reply

Marsh Posté le 29-07-2003 à 22:48:46    

c'est bon à savoir  ;)


---------------
* La vitesse de la lumière étant supérieure à celle du son, certaines personnes paraissent brillantes jusqu'à ce qu'elles ouvrent leur gueule. *
Reply

Marsh Posté le 30-07-2003 à 00:34:12    

je diffuserais bientôt le script pour lequel j'ai eu besoin de cette astuce... C'est pour ceux qui aiment mplayer et qui ont une carte TV. :D  
 
 :hello:  :sleep:


---------------
Jotenakis
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed