Tiedostojen uudelleen nimeäminen batchinä
-
- Viestit: 212
- Liittynyt: 14.1.2006 klo 15.12
Tiedostojen uudelleen nimeäminen batchinä
Viesti Kirjoittaja daBowmore »
input:
01052007.jpg
07072007.jpg
07072007(001).jpg
output:
20070501.jpg
20070707.jpg
20070707(001).jpg
Kiitos muuten Nokialle tästä todennäköisesti idioottimaisimmasta nimeämistavasta mitä äkkiseltään voisi keksiä.
Windowsissa tämmöinen onnistuisi itseltäkin helposti esim vbscriptillä, mutta miten tämmöinen tehtäisiin OS X:ään? AppleScript? Bash tms scripti? Joku muu, mikä?
Toinen tällaiseen skriptaamiseen liittyvä kysymys, minulla on Windowsissa useitakin skriptejä tiedostojen massakäsittelyyn tms. ja helpoin tapa käynnistää skripti oli lisätä se "Send To" -kansioon, jolloin tiedostojen/hakemistojen valinnan jälkeen "Send To" - "Oma skripti". Tällöin valitut tiedosto(t)/hakemisto(t) tulevat parametreinä skriptille. Mites tämänkaltainen toteutetaan OS X:llä?
OS X ohjelmointi- ja skriptauskokemus tasan nolla...
-
- Viestit: 4725
- Liittynyt: 8.3.2004 klo 17.38
- Paikkakunta: Helsinki
-
- Viestit: 80
- Liittynyt: 25.7.2007 klo 15.34
-
- Viestit: 212
- Liittynyt: 14.1.2006 klo 15.12
Viesti Kirjoittaja daBowmore »
Tämähän kuulostaa hyvältä. Ymmärtääkö tuo Rename Finder Items regexpiä? Vai tarvitsenko esim tällaisen.spiidi78 kirjoitti:Automator?
Vedä Action osasta "Rename Finder Items" listaan. Laita "Copy Finder Items" kohdasta ruksi kohtaan "Replacing existing files" ja alemmasta osiota säädä haluamasi nimeämistapa tiedostolle.
Yksi kysymys tuosta Copy Finder Items: Tuohan lisäytyi tosiaan automaattisesti "turvallisuus" syistä, eli varsinkin skriptiä testatessa voi tehdä alkuperäisistä kopiot joita nimeää uudelleen. Siihen vain piti määrittää kiinteästi hakemisto, pystyykö jotenkin määrittämään työhakemiston alle uutta hakemistoa johon kopiot tulisivat?
-
- Viestit: 17181
- Liittynyt: 15.11.2004 klo 11.07
Viesti Kirjoittaja mercury »
-
- Viestit: 212
- Liittynyt: 14.1.2006 klo 15.12
Viesti Kirjoittaja daBowmore »
Kiitos! Tämä kyseinen homma onnistui helposti File Listillä. Rename: Find and replace (..)(..)(....) --> $3-$2-$1 hoiti homman.Juhani L kirjoitti:Olen käyttänyt mm. digikuvien uudelleennimeämiseen File Listiä tällaisiin hommiin. On mielestäni kätevä ja helposti omaksuttavissa.
Automatoria pitää tutkia lisää, sillä näyttäisi saavan hieman lisää skriptattavuutta toimintoihin. Mutta sitten kun Automatorin rahkeet loppuvat kesken, niin ilmeisesti AppleScript olisi oikea tapa jatkaa?
Windows skripteissä olen tehnyt usein hieman virheenhallintaa. Esimerkki tässä kyseisessä tapauksessa voisi olla se, että yo. replacen matchit 1-3 todellakin muodostavat päivämäärän --> ei tulisi nimettyä väärän patternin mukaisia tiedostoja, jos sellaisia sattuu olemaan mukana. Kun automator kokemusta ei ole, niin pystyisiköhän sillä tekemään tälläisiä ehtolauseita, vai meneekö AppleScriptin puolelle?
EDIT: Niin threadissa puhuttiin myös Perl skriptistä. Perlistä on hieman "koodin ylläpito" tyyppistä kokemusta joten sen kirjoittaminen olisi tutumpaa. Mutta kumpaa/mitä ihmiset suosittelisivat OS X:ssä skriptaukseen, AppleScript/Perl/joku muu? AppleScript suoraan sanottuna näyttää karmealta Java/C#/C++ tottuneena. Ja jopa Visual Basicciin verrattuna

-
- Viestit: 1412
- Liittynyt: 22.2.2004 klo 23.08
- Paikkakunta: Helsinki
Viesti Kirjoittaja Sälli »
AppleScriptin vahvuus on sen kyky toimia yhteen ohjelmien kanssa. Tyyliin "hae kaikki biisit iTunesin soittolistasta x ja kuvat iPhoton albumista y". Jos siis haluat tämäntyyppistä toiminnallisuutta, valinta on AppleScript. Muussa tapauksessa valinta on täysin vapaa: shell-skriptit, perl, python, ruby,...daBowmore kirjoitti:EDIT: Niin threadissa puhuttiin myös Perl skriptistä. Perlistä on hieman "koodin ylläpito" tyyppistä kokemusta joten sen kirjoittaminen olisi tutumpaa. Mutta kumpaa/mitä ihmiset suosittelisivat OS X:ssä skriptaukseen, AppleScript/Perl/joku muu? AppleScript suoraan sanottuna näyttää karmealta Java/C#/C++ tottuneena. Ja jopa Visual Basicciin verrattuna
-
- Viestit: 81
- Liittynyt: 8.4.2007 klo 23.07
- Paikkakunta: Kuopio
Viesti Kirjoittaja lokki1977 »
Tämä skripti toimii juurikin Perlin säännöllisillä lausekkeilla (regexp) ja on mielestäni varsin tehokas. Esim tiedosto 'ddmmyyyy' muotoon 'yyyymmdd' onnistuu komentamalla `rename 's/(\d{2})(\d{2})(\d{4})/$3$2$1/' tiedostonnimi`.
Pentium 4 2,6GHz, 1GB RAM, 325GB HD, OpenBSD 4.4
Pentium 2 450MHz, 128MB RAM, 3GB HD, OpenBSD 4.2
-
- Viestit: 212
- Liittynyt: 14.1.2006 klo 15.12
Viesti Kirjoittaja daBowmore »
Kiitos vinkistä skriptiin sekä patterniin. Numeroita etsivä patterni nimittäin tuo turvallisuutta tuohon minun äkkiä kirjoittamaani s/(..)(..)(....)/$3$2$1/ verrattuna.lokki1977 kirjoitti:Minulla on käytössä Aristotle Pagaltzisin rename perl-skripti. En nyt löydä alkuperäistä saittia, mistä tämän hankin, mutta haluttaessa sen voi hakea osoitteesta http://personal.inet.fi/koti/marko.viho ... pts/rename.
Tämä skripti toimii juurikin Perlin säännöllisillä lausekkeilla (regexp) ja on mielestäni varsin tehokas. Esim tiedosto 'ddmmyyyy' muotoon 'yyyymmdd' onnistuu komentamalla `rename 's/(\d{2})(\d{2})(\d{4})/$3$2$1/' tiedostonnimi`.
-
- Viestit: 937
- Liittynyt: 5.6.2006 klo 13.48
- Paikkakunta: Helsinki
Viesti Kirjoittaja morbusg »
Koodi: Valitse kaikki
for i in *.jpg; do o=`echo $i | sed 's/\(..\)\(..\)\(....\)/\3\2\1/'`; mv $i $o; done

Koodi: Valitse kaikki
for i in *.jpg; do o=`echo $i | sed 's/^\([[:digit:]]\{2,\}\)\([[:digit:]]\{2,\}\)\([[:digit:]]\{4,\}\)/\3\2\1/'`; mv $i $o; done
-
- Viestit: 212
- Liittynyt: 14.1.2006 klo 15.12
Viesti Kirjoittaja daBowmore »
Shelliskriptit ovat käteviä (töissä käytän paljonkin), mutta kotikoneella tykkään raahata hiirellä kuvia ja kansioita paikasta toiseenmorbusg kirjoitti:Tässä vielä yksirivinen shell-versio sedillä:Sedillä ja awkilla siis ihan normi-regexpit. Eli tuo "." (piste) tarkoittaa mitä tahansa merkkiä, mutta jos haluaa että se on nimenomaan numero, niin sen voi korvata vaikka merkinnällä "[[:digit:]]". Sillon tosta tuleekin jo aika hirviö, ja aletaan lähennellä perlin luettavuuttaKoodi: Valitse kaikki
for i in *.jpg; do o=`echo $i | sed 's/\(..\)\(..\)\(....\)/\3\2\1/'`; mv $i $o; done
:
Koodi: Valitse kaikki
for i in *.jpg; do o=`echo $i | sed 's/^\([[:digit:]]\{2,\}\)\([[:digit:]]\{2,\}\)\([[:digit:]]\{4,\}\)/\3\2\1/'`; mv $i $o; done

Pystyykö shelliskriptiä käynnistämään esim draggaamalla hakemiston sen päälle siten että se vielä välittyisi parametrina mukaan?
-
- Viestit: 4927
- Liittynyt: 10.5.2005 klo 12.56
- Paikkakunta: Joensuu
Viesti Kirjoittaja gramdel »
Ei käsittääkseni ihan suoraan, mutta applescriptillä voi tehdä dropletin, johon fileet raahataan, joka sitten käynnistää shell scriptin.daBowmore kirjoitti: Pystyykö shelliskriptiä käynnistämään esim draggaamalla hakemiston sen päälle siten että se vielä välittyisi parametrina mukaan?
Edit: Laitetaan vielä esimerkki:
Koodi: Valitse kaikki
on open names
repeat with n in names
do shell script "shell script" & n
end repeat
end open
/---
ap
http://gramdel.kapsi.fi/
-
- Viestit: 81
- Liittynyt: 8.4.2007 klo 23.07
- Paikkakunta: Kuopio
Viesti Kirjoittaja lokki1977 »
<pilkunn****mista>morbusg kirjoitti:Tässä vielä yksirivinen shell-versio sedillä:Koodi: Valitse kaikki
for i in *.jpg; do o=`echo $i | sed 's/\(..\)\(..\)\(....\)/\3\2\1/'`; mv $i $o; done
Tuo takaheittomerkkien(? backquotes) käyttäminen ei ole POSIX:in mukaista enää nykyään ja on jopa vanhan-aikaistakin. komentojen korvaaminen kannattaa tehdä syntaksilla `$(komento)' ja se on tehokkaampaakin, jos komentosarjan sisälle tulee toinenkin komennon korvaaminen(? command substitution), tyyliin `$(komento $(toinen komento))' vastaan ``komento \`toinen komento\``'. Seuraava Ossihan on virallisesti POSIX ja UNIX yhteensopiva, jotta siihen malliin

</pilkunn****mista>
Ja miksi linkittämäni Perl-skripti on tehokkaampi kuin yo. shelliskripti jätetään kotitehtäväksi

Pentium 4 2,6GHz, 1GB RAM, 325GB HD, OpenBSD 4.4
Pentium 2 450MHz, 128MB RAM, 3GB HD, OpenBSD 4.2
-
- Viestit: 937
- Liittynyt: 5.6.2006 klo 13.48
- Paikkakunta: Helsinki
Viesti Kirjoittaja morbusg »
Ei POSIXissa määritetä ettei backtickejä voi käyttää:lokki1977 kirjoitti:<pilkunn****mista>
Tuo takaheittomerkkien(? backquotes) käyttäminen ei ole POSIX:in mukaista enää nykyään ja on jopa vanhan-aikaistakin. komentojen korvaaminen kannattaa tehdä syntaksilla `$(komento)' ja se on tehokkaampaakin, jos komentosarjan sisälle tulee toinenkin komennon korvaaminen(? command substitution), tyyliin `$(komento $(toinen komento))' vastaan ``komento \`toinen komento\``'. Seuraava Ossihan on virallisesti POSIX ja UNIX yhteensopiva, jotta siihen malliin.
</pilkunn****mista>
Ja miksi linkittämäni Perl-skripti on tehokkaampi kuin yo. shelliskripti jätetään kotitehtäväksi Iskee silmää
http://www.opengroup.org/onlinepubs/009 ... g_02_06_03
(katselu vaatii rekisteröitymisen). Sisäkkäisiä command substitutioneja voi tehdä backtickeilläkin. Makuasioista voi toki aina kiistellä.
Ja mun shellskirpti oli vaan sitä varten että näkee miten tehdä sama asia eri työkaluilla. Jos VBscript on OP:lle ollut mielenkiintoista niin perus bash/zsh jotka tulee ossin mukana kuvittelisin tuntuvan taivaalta vbscriptin/windowsin komentokehotteen jälkeen ;P
-
- Viestit: 81
- Liittynyt: 8.4.2007 klo 23.07
- Paikkakunta: Kuopio
Viesti Kirjoittaja lokki1977 »
Oho, niinpä voikin. Pitäis aina tarkastaa asiat ennenkuin rupean pätemäänmorbusg kirjoitti:Ei POSIXissa määritetä ettei backtickejä voi käyttää:
http://www.opengroup.org/onlinepubs/009 ... g_02_06_03
(katselu vaatii rekisteröitymisen). Sisäkkäisiä command substitutioneja voi tehdä backtickeilläkin. Makuasioista voi toki aina kiistellä.

No, oli miten oli, niin backtickit on se vanhempi ja nykyisin sanotaan vanhentunut tapa
![Hymy [:)]](./images/smilies/icon_smile.gif)
Jep, kyllähän shelliskriptit on monessa tilanteessa käteviä ja jos tiedostojen uudelleennimeämiselle olisi vain kertaluontoinen tarve, niin skriptisi olisi silloin jopa järkevin vaihtoehto.morbusg kirjoitti:Ja mun shellskirpti oli vaan sitä varten että näkee miten tehdä sama asia eri työkaluilla. Jos VBscript on OP:lle ollut mielenkiintoista niin perus bash/zsh jotka tulee ossin mukana kuvittelisin tuntuvan taivaalta vbscriptin/windowsin komentokehotteen jälkeen ;P
Itsekin tykkään väkertää sillointällöin sh-skriptejä, mutta yritän siirtyä käyttämään Perliä pääasiassa jatkossa, silloin kun se on soveliasta. Joissakin tilanteissa shelliskriptit edelleen ajavat asiansa paremmin, kuin Perl.
Pentium 4 2,6GHz, 1GB RAM, 325GB HD, OpenBSD 4.4
Pentium 2 450MHz, 128MB RAM, 3GB HD, OpenBSD 4.2
Palaa sivulle “Ohjelmointi, skriptit ja palvelimet”
- Yleiset aiheet
- ↳ Ajankohtaista Apple-maailmasta
- ↳ Käyttöjärjestelmät
- ↳ Ohjelmat
- ↳ Yleiskeskustelu
- Mac ja oheislaitteet
- ↳ Yleiskeskustelu laitteista
- ↳ MacBook, MacBook Pro ja MacBook Air
- ↳ iMac
- ↳ Mac mini
- ↳ Mac Pro ja Mac Studio
- ↳ Ongelmia Macin kanssa?
- iPhone, iPad ja Apple Watch
- ↳ iPhone-, iPad- ja Apple Watch -laitekeskustelu
- ↳ iPhone-, iPad- ja Apple Watch -ohjelmat sekä iOS
- ↳ Ongelmia iPhonen, iPadin tai Apple Watchin kanssa?
- Huviksi ja hyödyksi
- ↳ Off-topic
- ↳ Kuva ja graafinen suunnittelu
- ↳ Audio ja musiikki
- ↳ Video, televisio ja elokuvat
- ↳ Pelit ja pelaaminen
- ↳ Ohjelmointi, skriptit ja palvelimet
- ↳ Tietoturva ja varmuuskopiointi
- ↳ Verkot, mobiilidata ja muut puhelimet
- ↳ Retronurkka
- ↳ Foorumin ylläpito
- Kauppapaikka
- ↳ Myydään Mac
- ↳ Myydään iPhone, iPad ja iPod
- ↳ Myydään muut Applen tuotteet
- ↳ Myydään muuta tietotekniikkaa
- ↳ Ostetaan Mac
- ↳ Ostetaan iPhone, iPad ja iPod
- ↳ Ostetaan muut Applen tuotteet
- ↳ Ostetaan muuta tietotekniikkaa
- ↳ Vaihdetaan, annetaan, työtä haetaan ja tarjotaan
- ↳ Kauppapaikan keskustelu ja hintavinkit