← Back to team overview

sslug-teknik team mailing list archive

RE: Omdøbning af mange filer

 

> 2012/6/28 Jens Bang <mailinglists@xxxxxxx>:
> > Jeg forstår ikek hvad du mener...
> >
> > Jeg skal bruge find i stedet for *?
> >
> 
> ja command substitue find, hvis du bruger mellemrum i dine fil navne
> tror for det er et nyt argument. så pipe til tr fx
> for file in `find . | tr ' ' '_'`
> 
> > Mht sed scriptet: Vil du rette direkte i filnavnet?
> 
>   Man kan ikke rename i unix kun move.
> 
> > Eller lade sed scriptet generere en streng der indeholder det filnavn
> der skal renames
> > til og så bruge mv?
> >
> > -- Jens
> 
>   Hmm jeg vil arbejde med min for variable file fx
> 
> mv $file `echo $file | sed 's/badchars/goodchars/g' | tr '_' ' '`
> 
>   Du kan samle flere sed kommandoer i en fil og køre dem samlet i
> stedet for at blive ved med at pipe til sed eller bruge noget regex
> hvis du har et logisk mønster.
> 
>   man lidt de forskellige kommandoer og din shell.
> 
>   -- Hilsen Andreas
> 

Et lille script der håndterer det meste af det.


#!/bin/bash
#Start
convertillegalchar () {
tmpvar="${1//</_}"
tmpvar="${tmpvar//>/_}"
tmpvar="${tmpvar//\?/_}"
tmpvar="${tmpvar//\*/_}"
tmpvar="${tmpvar//:/_}"
echo "$tmpvar"
}


for file in $(find . -type f); do
  newfilename="$(convertillegalchar "$file")"
  if test "$file" != "$newfilename"; then
    echo "$newfilename"
  fi
done
#End

Her håndterer man flytning af fil incl. fejlkoder osv. inde i if-konstruktion.


Filer i mappe TEST:

ls -x TEST
a<b>c?d*e:  abc>.txt

Kørselsresultat:

./TEST/abc_.txt
./TEST/a_b_c_d_e_



Med venlig hilsen / Regards

Frank Larsen
Kimik IT A/S
PO Box 740
3900 Nuuk
Greenland
Mail : support@xxxxxxxxxxx
Phone: +299 34 20 00






References