[foto's]script om bestandsnaam te hernoemen

Pagina: 1
Acties:
  • 172 views sinds 30-01-2008
  • Reageer

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:11
Is het mogelijk om van een map foto's DSC001 tm DSC082 de namen te veranderen in DSC083 tm DSC164? Dus gewoon iets van DSC*** wordt DSC***+82?
Ik zit nl. met 4 mappen aan foto's die weer in een thumbnail script moeten en ze moeten op volgorde komen te staan... Dus handmatig namen veranderen is geen optie (300 foto's). Erbij zetten ook niet, want dan krijg je DSC001-1 waardoor de volgorde dus helemaal door de war gaat...

Zou iemand mij hiermee kunnen helpen? Of een programmatje dat dit doet?

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 01-02 20:46

dawuss

gadgeteer

op zich kun je redelijk eenvoudig met een shell, perl of zelfs php scriptje het nummer uit de bestandsnaam vissen, daar een getal bij optellen en daar vervolgens een nieuwe filename van knutselen.

Lees je eens in op het onderwerp "reguliere expressies", en kijk vervolgens welke scriptingtaal je het beste ligt voor dit doeleinde :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:11
Oke, maar ik kan dus echt helemaal niet programmeren oid... Maar ik ga eens even kijken naar dat reguliere expressies...

  • bierdop
  • Registratie: Juli 2000
  • Laatst online: 08-02 15:44
Als je niet kan of wilt programmeren kun je beter een programmaatje downloaden dat het werk voor je doet :). Zelf kan ik je "Advanced Find and Replace" aanraden maar er zijn er weerdere!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:11
Dat is alleen voor windows te krijgen... Dus daar heb ik niet zoveel aan :( Ik heb gekeken naar die reguliere expressies, maar eerlijk gezegd snap ik niet echt wat die reguleier expressies ermee te maken hebben. Als ik het goed begrepen heb zijn het een soort limiteringen (??? vaag woord) waarmee grep kan zoeken zodat een aantal outputs gevonden worden?

Wat ik nu gedaan heb is met locate /map1/*.jpg >> foto.txt|locate /map2/*.jpp > foto.txt|etc... de tekstfile foto.txt gemaakt waarin alle jpg's staan die van belang zijn... maar hoe kom ik dan verder?

  • Noork
  • Registratie: Juni 2001
  • Niet online
Rname-it kan dit.
http://ftp.pcworld.com/pu...le_management/rnameit.zip

edit: oh laat maar zitten. Ik was vergeten dat ik in NOS zat.

[ Voor 96% gewijzigd door Noork op 07-03-2005 12:39 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 19:03
code:
1
2
3
for count in `seq -w 1 82`; do
  echo mv DSC${count}.jpg DSC$[10#$count+82].jpg;
done


Lees de manual pages van bash en seq door om te snappen hoe het werkt - als je weet wat het moet kun je zelf wel uitzoeken hoe het werkt (hoop ik ;) ).

Haal de 'echo' pas weg uit dit commando als je zeker weet dat dit commando precies gaat doen wat je wilt dat het doet. Gebruik nooit commando's als 'mv' en 'rm' in combinatie met for-lussen e.d. als je (a) ingelogd bent als root en/of (b) nog aan het testen bent en dus niet 100% zeker weet dat het goed is.

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 20:11
oke, ik ben in linuxmagazine een artikeltje tegen gekomen wat deels doet wat ik wil m.b.v. ls en sed. Ik heb daardoor nu een bestand file1.txt waarin per regel staat mv "dscf*" waar sterretje het getal is van de foto.
Nu kan ik op dezelfde manier nog een file maken die zegt dat het getal 82 erbij op moet tellen en die dan bij elkaar pasten.

De regel die er dan komt te staan: mv "dscf0001" "dscf[0001+82]" En dan heb ik het scriptje wat ik wil hebben. Maar wat moet ik dan ingeven om "dscf[0001+82]" te krijgen?
Op zich zou ik gewoon die 2e 0 kunnen vervangen door een 1 en dan is het ook specifiek (mits minder dan 100 foto's per map), maar dat is natuurlijk niet zo netjes... (dit kan dan met ls dscf*|sed "s/dscf00/dscf01/ > file2.txt)

Edit:

Dankje Wilke voor je script, maar ik heb er nog een paar vraagjes over... Met die optie -w trek je het aantal getallen gelijk, zodat je niet een aantal dubbele krijgt, maar zoals jij het schrijft print ie dus dscf01 ipv dscf0001. Is er ook een mogelijkheid om daar wel 4 getallen van te maken? "for count in `seq -w 1 1000`;" doet dit, maar dan krijg je dat je er een heleboel teveel hebt die niet gevonden kunnen worden... En bovendien krijg je dan in het tweede gedeelte ook problemen... want daar pakt ie dat niet...
mv dscf00${count}.jpg dscf00$[10#$count+82].jpg; werkt voor de 1e 18 goed, voor de rest niet.

[ Voor 37% gewijzigd door Paultje3181 op 07-03-2005 13:41 ]


  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03-2025
volgens mij moet je met het volgende een heel eind komen:
code:
1
2
3
4
5
6
7
8
#!/bin/bash

for file in `ls`; do
  naam=`expr substr ${file} 1 4`
  num=`expr substr ${file} 5 2`
  num1=`expr ${num} + 82`
  echo ${naam}${num1}.jpeg
done


zie ook 'man expr'

Edit: kleine aanvulling om de nullen uit te vullen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

for file in `ls`; do
  naam=`expr substr ${file} 1 4`
  num=`expr substr ${file} 5 2`
  num1=`expr ${num} + 82`
  if [ ${num1} -lt 10 ]; then
    echo ${naam}00${num1}.jpeg
  elif [ ${num1} -lt 100 ]; then
    echo ${naam}0${num1}.jpeg
  else
    echo ${naam}${num1}.jpeg
  fi 
done

[ Voor 45% gewijzigd door El_kingo op 07-03-2005 15:47 ]

Pagina: 1