zcp un wrapper pour cp
L'autre jour sidh me demandait si je n'avais rien en zsh pour pouvoir suivre la progression d'un cp volumineux et je n'avais rien, mais j'ai trouvé l'idée intéressante. Un petit man cp plus tard, je me rend compte que le cp de FreeBSD il est beau et bien foutu, en lui envoyant un SIGINFO il nous dis ce qu'il fait et ou il en est. De là a wrapper tout dans un petit script zsh il n'y avait qu'un pas.
De plus zsh permet de créer un tty virtuel (zpty) dans lequel on peut exécuter des commandes et interagir, du coup, voici un petit script bien pratique :
#!/usr/local/bin/zsh setopt extendedglob zmodload zsh/zpty zpty copy "cp $@ 2>&1" ZPTYPID=${${=${(M)${(f)"$(ps -o pid,ppid,command)"}:#[[:space:]]#[[:digit:]]##[[:space:]][[:space:]]#$$*zsh*}}[1]} CPPID=${${=${(M)${(f)"$(ps -o pid,ppid,command)"}:#[[:space:]]#[[:digit:]]##[[:space:]][[:space:]]#${ZPTYPID}*cp*}}[1]} line="" while [ : ] do zpty -rt copy out if [[ $#out -gt 0 ]] then newline=${${=${out}}[0,-2]} percent=${${=${out}}[-1]} if [[ -z $line || "x$newline" != "x$line" ]] then [[ -n $line ]] && print "${line}: done" line=$newline print "${line}: ${(l: ::4:)percent}\c" else print "\r${line}: ${(l: ::4:)percent}\c" fi fi kill -SIGINFO $CPPID 2>/dev/null || break done [[ -n $line ]] && print "${line}: done" zpty -d copy
la sortie donne : # zcp toto.iso bla/ toto.iso -> bla/toto.iso: 48%
UPDATE: Apparemment ça ne fonctionne qu'avec zsh 4.3.10+
sympa ce zcp, il est sur mon desktop now :) thx bapt
sinon
je chie sur les spams mais pas sur IE !
ahah ! vive les commentaires postés sous IE.
Bapt wrote on 2009/09/25 :
Grmblbl