Pages : 1
#1 Le 24/06/2008, à 13:30
- fork
cp2 Script pourcentage de la copie
Bonjour
J'ai écris un script qui indique le pourcentage lors de la copie du fichier en cours
le probleme c'est que on doit donner en paramètre le nom du fichier de destination.
ex :
./cp2 /media/sda3/Divx/explic_melo.mpg /home/user/Bureau/eplic_melo.mpg
100 % du fichier /media/sda5/Divx/explic_melo.mpg copié
J'aimerai que le script puisse copier une suite de fichier lorsque l'on demande.
./cp2 /home/user/* /media/backup/
Ou encore que l'on ne donne pas de nom de fichier dans le 2eme argument
donc que le script fonctionne de la même façon que la commande cp.
Tout cela vient du fait qu'il faut calculer le pourcentage donc il faut un fichier de destination.
./cp2 /home/user/test.avi /home/user/Bureau/
J'y reflechis pour le moment et ça m'a l'air assez complexe!
Je créé ce poste pour voir vos pistes et vos idées
Merci !
Le script :
#!/bin/bash
usage()
{
echo "Usage: $0 original_file destination_file"
exit 1;
}
test $# == 2 || usage
orig_size=$(stat -c %s $1)
dest_size=0
cp -f $1 $2 &
while [ $orig_size -gt $dest_size ] ; do
dest_size=$(stat -c %s $2)
pct=$((( 100 * $dest_size ) / $orig_size ))
for j in `seq 1 $pct`; do
echo -ne "\r $pct % du fichier $1 copié "
done
done
echo
Antoine Even
Dernière modification par fork (Le 24/06/2008, à 13:32)
Hors ligne
#2 Le 25/06/2008, à 15:14
- pipou24
Re : cp2 Script pourcentage de la copie
interessant le stat -c %s pour avoir la taille des fichiers !
pour faire ce que tu souhaite avec plusieurs fichiers, je pense qu'il faut que tu fasse une somme dans une boucle for avec comme argument le nom de fichier :
for i in $*
do dest_size = dest_size + $(stat -c %s $i)
done
par contre, je demande a déplacer ton sujet dans le bon forum. Personne ne va s'interesser a ton sujet dans "general"
Non geek et fier de l'être. ㋡
Hors ligne
#3 Le 25/06/2008, à 18:39
- fork
Re : cp2 Script pourcentage de la copie
oui pas bête du tout
moi je penais faire une ligne par fichier copier
100 % du fichier /media/sda5/Divx/1.test copié
100 % du fichier /media/sda5/Divx/2.test copié
65 % du fichier /media/sda5/Divx/3.test copié
on peut faire un pourcentage total et un par fichier
ce n'est pas simple a calculé si il y a des repertoire et sous repertoire
ou avec la commande du -h
mais bon !
le gros porbleme c'est celui de la résolution des noms!
Merci pour ta réponse !
Dernière modification par fork (Le 25/06/2008, à 18:40)
Hors ligne
#4 Le 25/06/2008, à 18:54
- Zenigata
Re : cp2 Script pourcentage de la copie
Hmm a priori si tu mets une étoile en argument, c'est le shell qui va transformer ça et donner la liste complète à ton script.
il doit y avoir un $0 ou un truc du genre qui doit désigner tous les arguments passés.
Une boucle
for nom_complet in $0; do
devrait faire l'affaire, en parsant chaque nom complet pour vérifier qu'il correspondent bien ou non à des fichiers/dossiers existants, et surtout pour il y a deux cas à regarder :
soit c'est un dossier existant, auquel cas il faut copié les fichiers dans le dossier, soit c'est un fichier qui n'existe pas, dans ce cas il faut copié le fichier avec tel nom.
en gros si tu fais un
./cp2 dossiertest/* dossiertestdest/
il faudrait un truc du genre
test_last_arg;
for arg in touslesargs do;
chemin_complet=arg
recup_nom(arg)
faire ta cuisine sur le arg courant
done
Ici recup_nom(arg) est une fonction qui est capable de récupérer "toto" si l'argument est "chemindetoto/toto", c'est faisable avec awk, mais y'a surement plus simple (enfin moins lourd)
et test_last_arg est une fonction qui va tester si le dernier argument est le dossier de destination (i.e. dossier déjà existant) ou un fichier non existant...
Ensuite en vrai si tu fais un cp2 -r, faut faire attention, ça a le droit d'être un dossier ou un fichier existant, inexistant...
Bon après c'est ptet plus simple de faire ça autrement qu'en script...
--
Z.
Hors ligne
#5 Le 25/06/2008, à 19:04
- Pistolero
Re : cp2 Script pourcentage de la copie
Salut,
sur la toile ya aussi ca:
http://www.korben.info/avoir-une-barre- … linux.html
si ca peu aider...
Desole pour les accents, je suis esclave d'un qwerty.
Hors ligne
#6 Le 26/06/2008, à 02:02
- fork
Re : cp2 Script pourcentage de la copie
en gros si tu fais un
./cp2 dossiertest/* dossiertestdest/
il faudrait un truc du genre
test_last_arg; for arg in touslesargs do; chemin_complet=arg recup_nom(arg) faire ta cuisine sur le arg courant done
Meri bcp pour ta réponse ! je vais reflehir à tout ça des que j'ai le temps je commence les tests !
Salut,
sur la toile ya aussi ca:
http://www.korben.info/avoir-une-barre- … linux.htmlsi ca peu aider...
Oui, je l'ai vu aussi mais il ne fonctionne pas chez moi ! ?
tu l'as testé toi ?
Merci
Hors ligne
#7 Le 26/06/2008, à 03:24
- frafa
Re : cp2 Script pourcentage de la copie
lo
tiens je te passe cuila
il me sert a faire des copie de dossier...
#!/bin/bash
SOURCE="/mnt/tmp_liveusb"
DESTINATION="/mnt/liveusb"
function DECIMALE()
{
if [ $1 = "-p" ]; then
precision=$2; shift 2;
else
precision=2 # valeur par défaut ex: #DECIMALE -p 4 158/600*100
fi
bc -q << EOF
scale=$precision
$*
quit
EOF
}
function COPIE()
{
TAILLE=$(($(du -sB 1 ${SOURCE} | awk '{print $1}')/1000/1000));T1=1;
`rsync -aH --exclude="*~" ${SOURCE}/. ${DESTINATION}/.`& sleep 1;
(i=0 ; while [ $i -lt ${TAILLE} ] ; do
T1=$(($(du -sB 1 ${DESTINATION} | awk '{print $1}')/1000/1000))
i=$T1;
T2=`DECIMALE -p 2 $T1/$TAILLE*100`;
(echo -e "${T2}\n#Pourcentage de la copie sur ${DESTINATION} effectué: (${T2}%) de ${TAILLE}Mb";) #mod
sleep 1 ;
done) | zenity --progress --width 600 --auto-close
}
COPIE
Hors ligne
#8 Le 26/06/2008, à 06:18
- pef
Re : cp2 Script pourcentage de la copie
Quelqu'un à déjà écrit un patch pour avoir une barre de progression sur mv et cp :
http://ubuntuforums.org/showthread.php?p=2061158
Hors ligne
#9 Le 26/06/2008, à 12:42
- fork
Re : cp2 Script pourcentage de la copie
Quelqu'un à déjà écrit un patch pour avoir une barre de progression sur mv et cp :
http://ubuntuforums.org/showthread.php?p=2061158
Oui,c'est genial
Malheureusement si on regarde plus loin, un utuilisateur a essayé et :
WARNING! PROCEED AT YOUR OWN RISK! THIS BROKE MY SYSTEM AND I WENT BACK TO THE DEFAULT COREUTILS PACKAGE http://www.ralree.info/2007/11/11/addin … v-in-gutsy
Je ne préfere donc pas essayer
Par contre je viens de vois que RSYNC possède l'option --progress
rsync --progress -h Jimi\ Hendrix\ -\ Blues.pdf /home/user/Bureau/
Jimi Hendrix - Blues.pdf
87.79M 100% 12.17MB/s 0:00:06 (xfer#1, to-check=0/1)
sent 87.80M bytes received 42 bytes 11.71M bytes/sec
total size is 87.79M speedup is 1.00
Donc voila !:rolleyes:
si l'outil existe déjà pq le refaire ?
si je créé un script je le posterai !
Merci en tout cas !
Hors ligne