script voor het veranderen van filenames

Pagina: 1
Acties:

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
Omdat ik er gek van werd om in windows de namen van mp3's met de hand aan te passen ben ik begonnen met het schrijven van een bash script om dit te doen.

Ik heb de volgende files:

Gigi D'Agostino - cd1 - 01 Another Way.mp3
Gigi D'Agostino - cd1 - 02 L'Amour Toujours.mp3
Gigi D'Agostino - cd1 - 03 Elisir [Your Love].mp3
Gigi D'Agostino - cd1 - 04 The Riddle.mp3
Gigi D'Agostino - cd1 - 05 La Passion.mp3
Gigi D'Agostino - cd1 - 06 The Way.mp3
Gigi D'Agostino - cd1 - 07 Star.mp3
Gigi D'Agostino - cd1 - 08 Bla Bla Bla (Drammentenza M).mp3
Gigi D'Agostino - cd1 - 09 L'Amour.mp3
Gigi D'Agostino - cd1 - 10 Music.mp3
Gigi D'Agostino - cd1 - 11 Passion.mp3
Gigi D'Agostino - cd1 - 12 Bla Bla Bla.mp3

Nu wil ik dat alle nummer helemaal vooraan komen te staan en dat cd1 er tussen uit wordt gehaald.

met de volgende regel kom ik al een heel eind: ls|sed s/\ -\ cd1\ -\ /\ -\ /|sed s/\ -\ [0-9][0-9]\ /\ -\ /

ik krijg dan:

Gigi D'Agostino - Another Way.mp3
Gigi D'Agostino - L'Amour Toujours.mp3
Gigi D'Agostino - Elisir [Your Love].mp3
Gigi D'Agostino - The Riddle.mp3
Gigi D'Agostino - La Passion.mp3
Gigi D'Agostino - The Way.mp3
Gigi D'Agostino - Star.mp3
Gigi D'Agostino - Bla Bla Bla (Drammentenza M).mp3
Gigi D'Agostino - L'Amour.mp3
Gigi D'Agostino - Music.mp3
Gigi D'Agostino - Passion.mp3
Gigi D'Agostino - Bla Bla Bla.mp3

Maar deze uitvoer krijg ik alleen op het scherm, ik wil eigenlijk dat door middel van mv de namen ook echt veranderd worden. Ik heb al wat zitten proberen met een dubbele while read opdracht, maar daar kom ik niet helemaal uit(je leest het dan namelijk per woord in, en het moet straks ook werken met andere cd's).

verder verwijder ik op de manier die ik nu gebruik de cijfers, is er ook een manier om ze te verplaatsen?

/edit: ik gebruik nu trouwens cygwin, in principe moet dat geen probleem zijn.

[ Voor 8% gewijzigd door AtlonXP1800 op 19-05-2003 18:38 ]


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Ik gebruik altijd:

code:
1
2
3
4
for i in *
do
mv "$i" `echo $i | sed -e 's/cd1//'`
done


Let op, voor de e van echo en op het einde van die regel staat een backtick: `
die zit op dezelfde knop als de tilde (~).

"He took a duck in the face at two hundred and fifty knots."


  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
bedankt , dit is al een heel stuk in de goede richting, alleen "denkt" mv dat het om meerdere files gaat doordat er spaties in de naam zitten...

dit geeft: mv: wen moving multiple files, last argument must be a directory

Verwijderd

AtlonXP1800 schreef op 19 May 2003 @ 19:43:
bedankt , dit is al een heel stuk in de goede richting, alleen "denkt" mv dat het om meerdere files gaat doordat er spaties in de naam zitten...

dit geeft: mv: wen moving multiple files, last argument must be a directory
Daarom heeft _squatt_ er toch ook dubbel quotes omheen gezet !
Dan zijn het ook geen multiple files meer maar is het gewoon een enkelvoudige file naam. O-)

Verwijderd

AtlonXP1800 schreef op 19 May 2003 @ 19:43:
bedankt , dit is al een heel stuk in de goede richting, alleen "denkt" mv dat het om meerdere files gaat doordat er spaties in de naam zitten...

dit geeft: mv: wen moving multiple files, last argument must be a directory
Doe dan:
code:
1
2
3
for i in *.mp3; do
j=`echo $i | sed -e 's/cd1//'`;  mv "$i" "$j";
done;


(Op voorbehoud van typefouten ;)).

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01-2025
met het aanmaken van de j varibale werkt het wel, op zich zou het met de oplossing van _squatt_ ook prima moeten kunnen, ik heb waarschijnlijk een typfoutje gemaakt...

ik ga het nu even mooi uitwerken, en iets vinden om de getallen te verplaatsen

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
AtlonXP1800 schreef op 19 May 2003 @ 19:43:
bedankt , dit is al een heel stuk in de goede richting, alleen "denkt" mv dat het om meerdere files gaat doordat er spaties in de naam zitten...
Ik zie de fout al, er moet ook een paar "" om het laatste argument van 'mv':
Die aanhalingstekens vergeet ik echt altijd!
code:
1
2
3
4
for i in *
do
mv "$i" "`echo $i | sed -e 's/cd1//'`"
done

zoals Nem0 ook al liet zien :).

"He took a duck in the face at two hundred and fifty knots."


  • AntiChris
  • Registratie: Februari 2001
  • Laatst online: 10-12-2025

AntiChris

Fulltime IJsland-fan

* AntiChris typt "rename 's/- cd1 -/-/' *.mp3" en is klaar :)

Prog zit bij perl bijgeleverd (in Debian althans)

En það besta sem guð hefur skapað, er nýr dagur - Sigur Rós


  • YaPP
  • Registratie: Oktober 2002
  • Laatst online: 20-03 22:09

YaPP

vdboor

hmm... hier ben ik ook mee bezig, maar ik kom er niet echt aan toe om het ook echt 'af' te maken. (dat hij ook de ID3 tags verwerkt, misschien kan ik het daarvoor wel beter schrijven in Perl)

Hier is iig mijn begin, ik had veel mappen met underscore ("_") tekens erin:

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash


find . -depth | while read name; do

  #
  # Print directories (after files, because of -depth)

  if [ -d "$name" ]; then
    echo "- $name"
  fi

  #
  # Separate directory from base file name

  directory=`dirname "$name"`
  filename=`basename "$name"`

  #
  # No-go tests

  if [ "$filename" == "." ]; then
    continue
  fi

  #
  # Convert the file name

  new_filename=`echo "$filename" | sed 's/\_/\ /g'`
  new_name="$directory/$new_filename"

  if [ "$name" != "$new_name" ]; then
    mv "$name" "$new_name"
  fi

done

Don't take life too seriously, you won't get out alive..! ;)


Verwijderd

Ik moest wel even hacken, maar hier is het commando: :)
code:
1
2
for i in *.mp3; do mv "$i" "`echo $i | \
sed -e 's/\ cd1\ -//'| awk '{print $4 " " $i}' | perl -pe 's/.[0-9][0-9]//'`"; done
Haalt de tekst 'cd1' en de spaties daaromheen weg en verplaatst het tracknummer naar het begin van de bestandsnaam. Enjoy.

(Om de opmaak van het forum niet te verknoeien heb ik een '\' in het commando tussengevoegd, maar op je CLI kun je die natuurlijk weghalen en het commando op een regel invoeren.)

[ Voor 57% gewijzigd door Verwijderd op 20-05-2003 00:36 ]

Pagina: 1