Kirjoittaja Aihe: Kuvien massauudelleennimeäminen  (Luettu 2090 kertaa)

Higgins

  • Käyttäjä
  • Viestejä: 497
    • Profiili
Kuvien massauudelleennimeäminen
« : 22.02.08 - klo:08.47 »
Taustaa: Nikon - kamerani teki/tekee aika ajoin muistikortille uuden kansion, ja aloittaa kuvien nimeämisen tyyliin 0001.jpg. Kortilta kun lataan ne koneelle lataus- kansioon, niin tottahan siellä se 0001.jpg löytyy, edellisestä kamerakansiosta. Eli joudun taas tekemään alakansion uusille kamerasta tulleille kuville.

Muutan kameran asetuksia kunhan joudan ja ehdin manuskaa tavata, mutta kysyn:

Löytyykö esim rename- käskylle lisäosaa, jolla voisin kansiollisen kuvia uudelleennimetä kerralla esim siten, että siitä 0001.jpg :stä tulee esim 0001a.jpg. 0002.jpg:stä 0002b.jpg...Tämä a tulisi kaikkiin ko. kansion nimiin mukaan, jotta voisin alakansion kuvat siirtää ko. latauskansioon. Kuvat pysyisivät järjestyksessä luonti- eli kuvausajan mukaan...

Toivottavasti joku ymmärsi  ei niin selvän sepustukseni, Higg


Söötti

  • Käyttäjä
  • Viestejä: 12
    • Profiili
Vs: Kuvien massauudelleennimeäminen
« Vastaus #1 : 22.02.08 - klo:09.56 »
Voit käydä ne läpi for-loopilla ja siirtää (mv) toiselle nimelle muuttaen esim pisteen (.) muotoon a+piste (a.):
Koodia: [Valitse]
for i in `ls *.jpg`; do mv $i `echo $i|sed 's/\./a./'`;doneTämä toimii tietysti näin nätisti vain, mikäli tiedostonimessä on vain yksi piste, kuten esimerkissäsi oli.

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: Kuvien massauudelleennimeäminen
« Vastaus #2 : 22.02.08 - klo:21.16 »
Näistä ensimmäiset kaksi lisäävät a-kirjaimen ensimmäisen pisteen eteen ja jälkimmäiset kaksi lisäävät a-kirjaimen kaikkien pisteiden eteen. Jälkimmäiset toimivat siis samalla tavoin kuin Söötin esimerkki.

Koodia: [Valitse]
$ for f in *.jpg; do mv "$f" "${f/./a.}"; done
$ rename 's/\./a./' *.jpg
$ for f in *.jpg; do mv "$f" "${f//./a.}"; done
$ rename -n 's/\./a./g' *.jpg

Nämä puolestaan toimivat vaikka pisteitä olisi enemmänkin ja a-kirjain lisätään aina viimeisen pisteen edelle.

Koodia: [Valitse]
$ for f in *.jpg; do mv "$f" "${f%.*}a.${f##*.}"; done
$ rename 's/^(.*)\./$1a./' *.jpg

Tämä esimerkki olettaa että tiedostonimi koostuu vain numeroista ja tiedostopäätteestä. Tämä voi olla hyödyllinen jos hakemistossa on sekä 0001.jpg että 0001a.jpg ja halutaan nimetä pelkästään 0001.jpg nimelle 0001b.jpg ilman että 0001a.jpg:stä tulee 0001ab.jpg.

Koodia: [Valitse]
$ rename 's/^([0-9]*)\./$1b./' *.jpg

Higgins

  • Käyttäjä
  • Viestejä: 497
    • Profiili
Vs: Kuvien massauudelleennimeäminen
« Vastaus #3 : 22.02.08 - klo:21.56 »
Koodia: [Valitse]
$ for f in *.jpg; do mv "$f" "${f/./a.}"; done
$ rename 's/\./a./' *.jpg
$ for f in *.jpg; do mv "$f" "${f//./a.}"; done
$ rename -n 's/\./a./g' *.jpg

Kiitos Söötti& mgronber : Onnistui hienosti, kunhan taas muistin, että minulla jpg onkin JPG ja ...

Toiset ne vaan osaa, Higg

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: Kuvien massauudelleennimeäminen
« Vastaus #4 : 23.02.08 - klo:02.26 »
Kiitos Söötti& mgronber : Onnistui hienosti, kunhan taas muistin, että minulla jpg onkin JPG ja ...

Annetut ohjeet toimivat tuossakin tapauksessa jos kytket pienten ja suurten kirjainten erottelun pois päältä noiden komentojen suorittamisen ajaksi. Lopuksi voit sitten palauttaa sen takaisin päälle.

Koodia: [Valitse]
$ shopt -s nocaseglob
[...aiemmin kerrottuja komentoja...]
$ shopt -u nocaseglob

Toinen vaihtoehto on tietysti uudelleennimetä tiedostot käyttämään pieniä kirjaimia.

Koodia: [Valitse]
$ rename 'y/A-Z/a-z/' *.JPG