![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
SCRN! On Fre, 02 Feb 2001, Jan Trippler wrote:
On Don, Feb 01, 2001 at 08:36:23 +0100, Joerg Thuemmler wrote: Damit's rekursiv wird: for dn in `find . -type f -print`; do dnn=`dirname $dn`/`basename $dn | tr '[A-Z]' '[a-z]'` test "$dn" = "$dnn" || mv $dn $dnn done
Argl. Ich hasse Backticks. Die machen das so schnell unuebersichtlich! Besonders wenn's mehrstufig wird... \'`a '\'b\''`\' oder so. *g* for alt in $(find . -type f); do # -print ist default neu="$(dirname $alt)/$(basename $alt | tr '[A-Z]' '[a-z')" test "$alt" = "$neu" || mv "$alt" "$neu" done Wenn man gleichzeitig noch Leerzeichen durch _ ersetzen will kann man das prima mit einbauen: neu=" ... /$(basename ${alt// /_} | tr ...)" Und noch ein "Trick" (siehe 'man bash', nach '\$\{p' suchen), der zumindest in manchen Faellen funktioniert: $(basename $foo) = ${foo##*\/} $(dirname $foo) = ${foo%\/*} Wow (mussich mir merken): $ time for i in `seq 999`; do echo $(basename $f) >/dev/null; done real 0m10.623s $ time for i in `seq 999`; do echo ${f##*\/} > /dev/null; done real 0m0.170s $ time for i in `seq 999`; do echo $(dirname $f); done real 0m11.955s $ time for i in `seq 999`; do echo ${f%\/*}; done real 0m0.209s CU David, immer wieder begeistert vom der bash :) --
Blame directed at the wrong vendor tends to get reclassified as whining. No worries, I'm good at that too. -- Chris Hacking and Jay Mottern in asr