Regexp-hjälp

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2007-10-29 11:50

Jag har en hel del filer som jag skulle vilja byta namn på.
De heter i stil med:

abc.2003.dmg
another.file.2001.dmg
sing.sing.sing-a-long.2007.dmg
when.2.becomes.1.1999.dmg

Jag vill döpa om dem enligt mönstret:

2003.abc.dmg
2001.another.file.dmg
...

[0-9]{4} matchar årtalet, men hur ska jag göra för att byta namn på alla filer enligt det nya mönstret?

  • Medlem
  • Kiruna
  • 2007-10-30 01:21

Exempelvis så här:

ls | egrep '^.*\.[0-9]{4}\.dmg$' | sed -E 's/^(.*)\.([0-9]{4})\.dmg$/"&" "\2\.\1\.dmg"/' | xargs -n 2 mv

ls listar alla filer i den aktiva katalogen. Nästa steg (egrep) väljer ut de filer som matchar namnet (utifall det finns andra filer i katalogen). Sedan tar sed vid och spottar ut både originalnamnet och det nya namnet (inom citattecken utifall det skulle råka finnas blanksteg i namnet) som sedan via xargs skickas som argument till mv.

Pröva gärna i en testkatalog med ett fåtal kopior av de "riktiga" filerna, så du vet att det fungerar som du önskar.

  • Medlem
  • International user
  • 2007-10-30 01:24

Guld!
Jag kokade ihop ett litet ruby-program som gjorde det åt mig, men det var egentligen något sådant där jag var ute efter. Tackar och bockar!

1
Bevaka tråden