← Back to team overview

sslug-teknik team mailing list archive

Re: Omdøbning af mange filer

 

"Jens Bang" <mailinglists@xxxxxxx> writes:

> Jeg har en stor mængde filer i et directorytræ, som skal flyttes fra ext3
> til vfat. I den forbindelse skal jeg have fjernet en række tegn fra fil-og
> directorynavne, som er lovlige under ext3, men ulovlige under vfat.
> Hvordan gør jeg det nemt? Helst i bash.

Hvis du bruger en debian-baseret distribution, så kan du bruge rename(1)
kommandoen. Hvis manualsiden henviser til 'perlexpr' så er den brugbar,
ellers se i bunden af dette indlæg.

Noget ala:

$ rename 's/["<>?*:]/_/g' files ...

Så er der selvfølgelig spørgsmålet om mellemrumstegn. Jeg ville bruge
noget ala

$ find -depth -execdir rename 's/["<>?*:]/_/g' {} +

Med -execdir skifter find(1) først katalog inden den udfører
komandoen. Dermed kan vi nøjes med at skulle håndterer et niveau af
filnavne ad gangen, hvilket er meget lettere. Jeg er overbevist om at
find gør det rigtige med filnavn der indeholder mellemrumstegn. Når man
afslutter -exec og -exedir med + burde den selv tage lige så mange filer
som muligt lige som hvis man havde brugt xargs.

Med -depth sikrer man at indholdet af kataloger bliver behandlet før
kataloget selv. Jeg er ikke sikekr på at dette er helt nødvendigt, men
det vil måske forhindre find(1) i at blive forviret.


Hvis du derimod bruger en distribution der henter rename(1) kommandoen
fra GNU core-utils, så bliver det noget mere besværligt. Prøv at se om
du ikke har en prename, perl-rename eller en rename.pl istedet. Ellers
se på mmv, men jeg er ikke helt overbevist om den kan det du vil. 

//Makholm


Follow ups

References