batch rename

Michel Talon talon at lpthe.jussieu.fr
Sat Jan 5 03:13:01 PST 2008


Aryeh M. Friedman wrote:
>  My goal is to rename several files in such a way as to decapitalize
> > starting letters in their names. The solution seems to be simple
> > but I'm stuck. What should I use? awk/sed or write some
> > shell-script?
> 
> This assumes tcsh:
> 
> foreach i (`ls [A-Z][a-z]*`)
>     mv $i `echo $i|tr 'A-Z' 'a-z'`
> end

This will disfunction if the names have embedded white spaces. I happen
to batch rename songs etc. which almost invariably have white spaces and
other horrors. So i use something like

mv "$i" `echo $i|sed -e 's/  */_/g' -e '.....' `

Sed has the advantage you can do several transformations at one stroke,
and fine tune the transformations. Double quotes avoid that the shell
breaks names on white space.

-- 

Michel TALON



More information about the freebsd-questions mailing list