Tiedostojen nimeäminen järjestykseen

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).
3277
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Sillä pitäisi onnistua. mmv=multimove

Äänestä

Kokeiles vaikka

man printf

ja esimerkiksi

newname=`printf kuva_d.jpg $n`

Äänestä
  • 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.

    Äänestä

Kommentoi aloitusta


b22bb41b kirjoitti:

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).

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu