Re: [Script BASH] vérifier taille fichier avant de le déplacer avec mv
"zelos 414" <[email protected]>
| Newsgroups | gmane.linux.mandrake.expert.french |
|---|---|
| Message-ID | <[email protected]> |
J'ai pas très bie n compris cette ligne:
set -- $(df -k /home/jipe/video); eval dispo=\${$(($#-2))}; echo $dispo
828476
PS: en tous cas, bravo à jipe et napo978 pour leurs démonstrations de bash!!!
Le 29/01/07, jipe<[email protected]> a écrit :
> On Sun, 28 Jan 2007 15:35:32 +0100
> linux_forever <[email protected]> wrote:
>
> > Bonjour,
> >
> > J'ai réalisé un rapide script (heu... une ligne de commande) qui me permet de
> > déplacer des fichiers d'un répertoire vers un autres:
> >
> > mv /home/user/*.avi /mnt/disque/avi/
> >
> > Cela me déplace donc tous mes fichiers.
> > Le problème que j'ai c'est que si le rep de destination est presque plein, il
> > me transfère tout de même une partie de mes fichiers, et je me retrouve sur
> > le rep de destination avec des fichiers non valides car non complet.... Par
> > fois même de 0 octets, que seul le root peut supprimer....
> >
> > Le but serait donc de vérifier la place dispo, avant le déplacement de chaque
> > fichier:
> >
> > Pour récupérer la place du disque courrant en ko, j'e fait ceci
> > du -shk | cut -f1 #place sur le rep courrant en kilo octets
> >
> > Mon problème serait donc de pouvoir boucler sur chaque fichier afin de
> > vérifier la taille....
> >
> > Merci de votre aide et bon dimanche!
> >
>
> évite les pipes trop longs ainsi que les répétitions de commande. tu peux boucler avec for
> sur tous les avi d'un répertoire et faire une commande qui te donne la taille de chacun
> comme du ou ls -l par exemple, soit autant de fois la commande, ou lancer une commande une fois
> pour tous les avi et en récupérer le résultat dans une boucle while qui prend chaque ligne
> de la commande comme argument. exemple:
>
> ls -l *.avi # va te donner ça:
>
> [jipe@esther incoming]$ ls -l *.avi
> -rw-r--r-- 1 jipe jipe 176144384 jan 23 10:21 mon avi n01.avi
> -rw-r--r-- 1 jipe jipe 176105472 jan 23 04:37 mon avi n02.avi
> -rw-r--r-- 1 jipe jipe 176310272 jan 23 06:01 mon avi n03.avi
> -rw-r--r-- 1 jipe jipe 1565468672 jan 15 11:28 mon avi n04.avi
>
> les champs intéressants sont 5 et >8. on peut les récupérer dans une boucle while ainsi:
>
> while read a b c d taille e f g avi; do echo "$taille" "$avi"; done
>
> chaque lettre après read représente un champ, les champs intéressants sont nommés taille et avi
>
> [jipe@esther incoming]$ ls -l *.avi | while read a b c d taille e f g avi; do echo "$taille" "$avi"; done
> 176144384 mon avi n01.avi
> 176105472 mon avi n02.avi
> 176310272 mon avi n03.avi
> 1565468672 mon avi n04.avi
>
> pour avoir la taille en ko, il suffit de remplacer $taille par $((taille/1024))
>
> [jipe@esther incoming]$ ls -l *.avi | while read a b c d taille e f g avi; do echo $((taille/1024)); done
> 172016
> 171978
> 172178
> 1528778
>
> pour récupérer l'espace disponible tu peux utiliser df. là aussi tu peux le faire pour chaque fichier ou
> seulement une fois au début et soustraire.
>
> [jipe@esther incoming]$ set -- $(df -k /home/jipe/video); eval dispo=\${$(($#-2))}; echo $dispo
> 828476
> [jipe@esther incoming]$ ls -l *.avi | while read a b c d taille e f g avi; do taille=$((taille/1024)); dispo=$((dispo-taille)); if ((dispo>0)); then echo déplacement de "$avi" possible; else echo déplacement de "$avi" impossible; fi; done
> déplacement de mon avi n01.avi possible
> déplacement de mon avi n02.avi possible
> déplacement de mon avi n03.avi possible
> déplacement de mon avi n04.avi impossible
>
> voilà, il ne te reste plus qu'à adapter à ton besoin et à te lancer avec mv :þ.
> n'oublie pas de quoter tes variables avec "" si tu as des fichiers avec espaces
>
>
> bye
> jipe
>
>
>
>
>
>
> ____________________________________________________
> Want to buy your Pack or Services from Mandriva?
> Go to http://store.mandriva.com
> Join the Club : http://www.mandrivaclub.com
> ____________________________________________________
>
>
>
message-footer.txt
(text/plain, 232 B)
____________________________________________________ Want to buy your Pack or Services from Mandriva? Go to http://store.mandriva.com Join the Club : http://www.mandrivaclub.com ____________________________________________________