Toon posts:

[linux] batch rename

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb een dir vol foto's, deze heten 1.jpg 2.jpg etc. t/m 300.jpg ofzow.

nu wil ik dat de foto's 001.jpg 002.jpg etc. 099.jpg 100.jpg etc. gaan heten, dit zou moeten kunnen met het proggie rename maar daar kom ik niet bepaald uit want de manual is een beetje beperkt. iemand een idee ?

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 16-08 16:08

deadinspace

The what goes where now?

rename is vrij eenvoudig, namelijk: 'rename <regexp> <files>'. Moet je wel regexps kennen :)

En aangezien ik slechts hele basic regexps ken (en niet weet of wat jij wilt mogelijk is in een regexp) heb ik een andere oplossing:
code:
1
for ((I=0;I<300;I++)); do mv $I.jpg $(printf "%.3i" $I); done

Altijd eerst directory backuppen he ;)

  • RemcoX
  • Registratie: Mei 2000
  • Laatst online: 14-02 20:05
Op zondag 24 februari 2002 02:28 schreef deadinspace het volgende:
code:
1
for ((I=0;I<300;I++)); do mv $I.jpg $(printf "%.3i" $I); done
Kent bash van dit soort for-loops? Deze regel werkt in mijn bash in ieder geval niet. En je vergeet de extensie.

Mijn poging:
code:
1
for I in `seq 0 300`; do mv $I.jpg `printf "%.3i" $I`.jpg; done

(deadinspace: Ik ga er maar vanuit dat die regel als bash script bedoeld is, misschien ken jij een taal die het wel accepteerd ;))

  • active2
  • Registratie: Juni 2001
  • Laatst online: 17-07 21:56

active2

Google is your friend

ja C++ en C >:)

Google, Het mirakel van de 21e eeuw!!!!


  • RemcoX
  • Registratie: Mei 2000
  • Laatst online: 14-02 20:05
Op zondag 24 februari 2002 09:40 schreef active2 het volgende:
ja C++ en C >:)
Ik had het over talen die de regel van deadinspace accepteren, omdat hij dat er niet bij vertelde waarvoor het was.

En dat doen C en C++ niet, die regel accepteren.

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

code:
1
for ((I=0;I<300;I++)); do mv $I.jpg $(printf "%.3i"$I.jpg); done




Zonder die spatie werkt het wel.

1 maar: zo komen er overal 3 nullen voor.

Whenever you find that you are on the side of the majority, it is time to reform.


  • RemcoX
  • Registratie: Mei 2000
  • Laatst online: 14-02 20:05
Op zondag 24 februari 2002 11:33 schreef Pinball het volgende:
Zonder die spatie werkt het wel.

1 maar: zo komen er overal 3 nullen voor.
Dat is dus niet de bedoeling. Je moet ook niet die spatie weg halen.

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Klopt, ik had deadinspace's manier niet geprobeerd omdat jij zei dat ie niet werkte. :D

Maar hij werkt hier prima (met spatie idd).

Whenever you find that you are on the side of the majority, it is time to reform.


  • RemcoX
  • Registratie: Mei 2000
  • Laatst online: 14-02 20:05
Op zondag 24 februari 2002 11:47 schreef Pinball het volgende:
Maar hij werkt hier prima (met spatie idd).
Dus die for lus werkt bij jou?

  • RemcoX
  • Registratie: Mei 2000
  • Laatst online: 14-02 20:05
Op zondag 24 februari 2002 11:49 schreef RemcoX het volgende:

[..]

Dus die for lus werkt bij jou?
Ah, ik ben er achter. De nieuwere bash versies kennen het wel.

Ik heb hier op de machine waarop ik het probeerde bash 2.03.0 draaien, en die doet het niet.

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 16-08 16:08

deadinspace

The what goes where now?

Op zondag 24 februari 2002 08:53 schreef RemcoX het volgende:
Kent bash van dit soort for-loops? Deze regel werkt in mijn bash in ieder geval niet.
Zoals je later al zegt: ja :)
En je vergeet de extensie.
Oeps, idd.

Goed, nu hier de versie met extensie (de extensie moet gewoon binnen de ""... Het is bijna hetzelfde als printf() in C):
code:
1
for ((I=0;I<300;I++)); do mv $I.jpg $(printf "%.3i.jpg" $I); done

En de versie zonder C-style forloop, voor oudere bashes (maar hij doet hetzelfde):
code:
1
for I in $(seq 0 299); do mv $I.jpg $(printf "%.3i.jpg" $I); done

En dan hier even een forloopje met 'echo' voor de mv (zodat hij niet verplaatst maar het commando op het scherm zet), om te laten zien dat het allemaal zou moeten werken ;) :
code:
1
2
3
4
5
$ for ((I=8;I<12;I++)); do echo mv $I.jpg $(printf "%.3i.jpg" $I); done
mv 8.jpg 008.jpg
mv 9.jpg 009.jpg
mv 10.jpg 010.jpg
mv 11.jpg 011.jpg
Pagina: 1