Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/06/2008, à 13:30

fork

cp2 Script pourcentage de la copie

Bonjour big_smile

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 wink
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

smile 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 tongue
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... wink


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

Zenigata a écrit :

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 !

Pistolero a écrit :

Salut,

sur la toile ya aussi ca:
http://www.korben.info/avoir-une-barre- … linux.html

si ca peu aider... wink

Oui, je l'ai vu aussi mais il ne fonctionne pas chez moi ! ? hmm
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

pef a écrit :

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 smile
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