[gull] Progress pour cp

Christophe Pochon music at christophe-pochon.com
Fri Sep 30 14:23:24 CEST 2011


Bonjour !

Je me suis mis en tête de réaliser un script pour automatiser la sauvegarde
des données essentielles des utilisateurs sur le réseau de mon entreprise.
Le contexte, c'est que dans deux semaines je vais installer un nouveau
serveur et je veux éviter de récupérer l'intégralité des homes des
utilisateurs, pour éviter d'importer des trucs qui ne servent à rien ou qui
pourrait foutre le bordel.

Je veux que ce soit les utilisateurs qui lancent chacun le script, qui va
créer un fichier zip qu'ils vont manuellement copier sur une clef USB. Quand
le nouveau serveur sera en route, ils vont ouvrir leur nouvelle session
(avec sans doute un identifiant différent de l'actuel) et lancer un autre
script (qui sera avec mon zip sur leur clef), qui va tout remettre où ça
doit.

Comme je ne suis pas un monstre niveau expérience dans les scripts, j'ai
passé pas mal d'heures à faire un truc qui fonctionne. Et ça fonctionne ! Ca
copie tout ce que je veux sauvegarder dans un répertoire temporaire, puis ça
fait un zip avec le tout et ensuite ça efface les données temporaires et ça
génère le script pour l'import.

Mais comme je suis perfectionniste, j'ai voulu modifier mon script pour
qu'il donne un feedback un peu plus parlant aux utilisateurs. Je voudrais
mettre pour chaque groupe de copie de fichiers, puis pour la génération du
zip, une sorte de "progress bar", en fait, avec juste des petits "." qui
s'alignent côte à côte, pour que l'utilisateur se rende compte que mon
script est bien en train de travailler, qu'il n'a pas planté. Ma foi, si ça
copie un fichier de 4GB, ben y aura quand même qu'un petit point, mais c'est
mieux que rien. Donc l'idée s'était de récupérer la sortie "verbeuse" de la
commande "cp", et transformer chaque ligne de ladite sortie en un petit
point. En faisant :

cp -Rv $HOME/Documents /Users/Shared/temp/ | sed s/^.*$/./

Ca fonctionne à peu près, sauf que ça me met un retour à la ligne après
chaque "." alors que les voudrais côte à côte.

En faisant :

cp -Rv $HOME/Documents /Users/Shared/temp/ | sed s/^.*$/./ | tr -d '\n'

Ca me donne le résultat désiré, mais d'un bloc ! Ca fait toutes les copies,
et à la fin j'ai plein de petits points qui apparaissent d'un seul coup.

Alors, après des heures de recherches sur le net, je me dis qu'il y a bien
un gourou sur cette liste qui va me pondre une solution en deux coups de
cuiller à pot....

Dites-moi si vous voulez voir tout mon script.

Ah, et c'est loin d'être un détail : ce script doit tourner sous OSX !!!

Merci mille fois !

Christophe Pochon
http://www.christophe-pochon.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20110930/b3d660fa/attachment.htm>


More information about the gull mailing list