Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ubuntu tietokoneissa => Aiheen aloitti: Higgins - 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
-
Voit käydä ne läpi for-loopilla ja siirtää (mv) toiselle nimelle muuttaen esim pisteen (.) muotoon a+piste (a.):
for i in `ls *.jpg`; do mv $i `echo $i|sed 's/\./a./'`;done
Tämä toimii tietysti näin nätisti vain, mikäli tiedostonimessä on vain yksi piste, kuten esimerkissäsi oli.
-
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.
$ 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.
$ 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.
$ rename 's/^([0-9]*)\./$1b./' *.jpg
-
$ 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
-
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.
$ shopt -s nocaseglob
[...aiemmin kerrottuja komentoja...]
$ shopt -u nocaseglob
Toinen vaihtoehto on tietysti uudelleennimetä tiedostot käyttämään pieniä kirjaimia.
$ rename 'y/A-Z/a-z/' *.JPG