Minulla on eräässä hakemistossa 150 sekalaisesti nimettyä kuvatiedostoa.
Haluaisin nimetä ne uudelleen siten, että vanhin tiedosto saisi esim. nimen "kuva_000.jp2" ja niin poispäin, uusimman saadessa nimen "kuva_149.jp2".
Olen koettanut seuraavilla komennoilla, mutta se ei osaa lisätä ensimmäisten 0...9, 10...99 tiedostojen nimiin tarvittavaa määrää nollia. Joten tiedostot eivät tule (tietokoneen mielestä) oikeaan järjestykseen, "ls -l" -komento EI näytä niitä oikeassa järjestyksessä.
% n=0
% for file in `ls -lt -c | grep -v total | tac | cut -c51-`
do
newname=kuva_$n.jpg
echo ./$file ./$newname
n=$(( $n 1 ))
done
Tuolla skriptillä tiedostot nimeytyvät siis esim. seuraavasti:
kuva_0.jp2
...
kuva_56.jp2
...
kuva_125.jp2
...
jolloin tietokone ei ymmärrä järjestystä puuttuvien "etunollien" vuoksi...
Ehdotuksia otetaan vastaan... tiedostot pitäisi siis tosiaan saada järjestykseen nimenomaan päivämäärän/kellonajan mukaan, vanhimmasta uusimpaan (ls -lt -c | tac).
Haluaisin nimetä ne uudelleen siten, että vanhin tiedosto saisi esim. nimen "kuva_000.jp2" ja niin poispäin, uusimman saadessa nimen "kuva_149.jp2".
Olen koettanut seuraavilla komennoilla, mutta se ei osaa lisätä ensimmäisten 0...9, 10...99 tiedostojen nimiin tarvittavaa määrää nollia. Joten tiedostot eivät tule (tietokoneen mielestä) oikeaan järjestykseen, "ls -l" -komento EI näytä niitä oikeassa järjestyksessä.
% n=0
% for file in `ls -lt -c | grep -v total | tac | cut -c51-`
do
newname=kuva_$n.jpg
echo ./$file ./$newname
n=$(( $n 1 ))
done
Tuolla skriptillä tiedostot nimeytyvät siis esim. seuraavasti:
kuva_0.jp2
...
kuva_56.jp2
...
kuva_125.jp2
...
jolloin tietokone ei ymmärrä järjestystä puuttuvien "etunollien" vuoksi...
Ehdotuksia otetaan vastaan... tiedostot pitäisi siis tosiaan saada järjestykseen nimenomaan päivämäärän/kellonajan mukaan, vanhimmasta uusimpaan (ls -lt -c | tac).
Vastaukset 3
Vanhimmat
Sillä pitäisi onnistua. mmv=multimove
Kokeiles vaikka
man printf
ja esimerkiksi
newname=`printf kuva_d.jpg $n`
Tämä toimii täydellisesti, kiitos paljon!
Windowsissa olisin varmaan joutunut asentamaan jonkin lisäohjelman tuollaisen yksinkertaisen operaation suorittaakseni. Kyllä komentotulkki on vaan niin kertakaikkisen näppärä niin monessa asiassa. Se saa todella paljon aikaan kun sille vaan osaa antaa oikeat toimintaohjeet...
Tässä vielä skripti lopullisessa muodossaan.
% n=0
% for file in `ls -lt -c | grep -v total | tac | cut -d ' ' -f8-`
do
newname=`printf kuva_%04d.jp2 $n`
mv "./$file" "./$newname"
n=$(( $n + 1 ))
done
Vielä tuossa olisi vähän paranneltavaa, välilyönnit nimittäin näkyvät laittavan skriptin sekaisin.