Onko tiedosto muuttunut

Jos minulla on vaikka tiedosto: kuva.jpg

Haluasin tehdä BASH skriptin, joka tarkistaa, onko kuva muuttunut viime kerrasta, jos on niin luoda uusi thumbnail. Miten tämä helppoiten onnistuu?

Voisi tietenkin kopioida kuvan toiseen hakemistoon ja sitten verrata sen alkuperäiseen. Mutta tällöin tarvitaan kaksi kopiota kuvasta. Mikä tietenkin vie tilaa ja ei ole kovin tehokasta.

Onko jotain parempaa tapaa? En haluaisi käyttää ohjelmointikieliä jos ei ole aivan pakko ja homma onnistuu helposti bashillakin.
1996
Äänestä

Muut lukivat myös

Vastaukset 19

Vanhimmat

Jos alkuperäisestä kuvasta ei ole kopiota missään, mihin se skriptisi voisi verrata, onko alkuperäinen kuva muuttunut?

Äänestä
  • Vaikka MD5/SHA1 hash checksummin avulla. Tai vaikka päivämäärän mukaan, jne...

    Ehkä parempi tehdä loki teidostoista kuin kopioida tiedostot?

    Äänestä

  • ehkäehkä kirjoitti:

    Vaikka MD5/SHA1 hash checksummin avulla. Tai vaikka päivämäärän mukaan, jne...

    Ehkä parempi tehdä loki teidostoista kuin kopioida tiedostot?

    Jotain alkuperäisestä kuvasta tietenkin ja ilmeisesti tarvitaan että mitään vertailua voidaan tehdä.

    Äänestä

  • Mikä lasketaan muutokseksi? touch-komennolla voi tehdä päivämäärämuutoksen kuvaan. Kuva ei ole silloin muuttunut, mutta sen päivämäärä on. Jos kuva on vain muistipuskurissa, ei ole mitään tiedostoa, mihin sitä verrata. Näin ollen vertailualgoritmin on löydyttävä käyttämästäsi ohjelmasta. Tiedostojen vertailu kun perustuu tiedostojen olemassaoloon hyvin pitkälti. Rsync:n avulla pystyy luomaan päivityskomennon, joka päivittää tiedoston esim. päiväyksen ollessa uudempi, kuin aiemmassa versiossa. Lisäksi se osaa laskea tiedostolle pyydettäessä koosteen(=tarkistussumman), jota vertaamalla se voi myös tehdä päivityksen. Päivityksen voi tehdä myös molempiin suuntiin, jolloin lähde ja kohde hakemistot synkronoituvat.
    Valvontakameroissa on myös joissakin mahdollisuus tuollaiseen: Kamera alkaa lähettää kuvaa vasta, kun ruudussa on tapahtunut riittävän suuri muutos. Esim. loikkiva jänis ei välttämättä laukaise kameraa toimintaan, mutta isompi koira jo laukaisee. Tätä voi tietysti tehdä myös valvontakameran ohjelmistosta käsin, esim. zoneMinder:iin voi kytkeä tavallisen web-kameran ja ohjelma ottaa kuvia tarvittaessa.
    Myöskin löytyy web-serverillä pyöriviä ohjelmia, jotka tekevät tätä: Piwigo:lla voit ladata kuvia serverille, joka skaalaa ne automaattisesti thumbnail näytettävään kokoon.
    Ei siis ole mikään pakko tehdä itse skriptiä, millä toteuttaa joku(jo aiemmin toteutettu) asia TAAS uudestaan. Mutta jos välttämättä haluat yrittää, niin tässä:
    $ touch zero
    $ md5sum zero > zero.md5
    $ md5sum -c zero.md5
    zero: OK
    $ echo $?
    0
    $ echo 0 > zero
    $ md5sum -c zero.md5
    zero: EI TÄSMÄÄ
    md5sum: WARNING: 1 computed checksum did NOT match
    $ echo $?
    1
    Kyllä se siitä lähtee, kun muistaa vielä if-syntaksin:
    if [ $? -eq 0 ]; then echo 0; else echo 1; fi

    Äänestä

Näin on mitä tuossa yläpuolella jo sanotaan. Jotta muutkosen tarkistus onnistuisi, täytyy olla olemassa tallennettua tietoa kuvista ja niihin liittyvistä pikku-kuvista. Minä laiskana miehenä en aloittaisi tekemään ohjelmaa tuon muutos-tietokannan ylläpitoon, vaan ajaisin tarkistus komennon kun siihen on tarvetta. Pikkukuvien teko vie niin vähän aikaa että ne heittämällä päivittää kaikki samalla kertaa.

Tein mallin jolla saa tilanteen ajantasalle kansio kohtaisesti näin:
find $HOME/Kuvat/*.png -type f -exec tee-pienoiskuvat {} \;

Ja pikkukuvien tekoon sopiva BASH SHELL Script löytyy kuvana täältä:
https://i.postimg.cc/kgWqFvkg/Valinta-021.png
Kirjoita tuo koodi tiedostoon $HOME/bin/tee-pienoiskuvat

Pikkukuvat tulevat olemaan leveydeltään 200px korkeuden ollessa lukittu leveyteen, muuta se haluamaksesi riviltä: 12

Pikkukuvan tunnisteena on nimeen lisätty osa "thumbnail-", jos se ei kelpaa tee muutkoset riveille:
6 ja 9. HUOM älä muuta rivillä 12 olevaa, se ei ole tunniste.

Äänestä
  • Riippuu nyt siitä haluatko, että päivittyneestä kuvasta tehdään thumbnaili vain sillon kun käyttäjä ajaa jonkin skriptin, vai haluatko että thumbnaili luodaan automaattisesti heti jos kuvaa muutetaan. Ensimmäiseen tapaukseen en tässä kommentoi. Jälkimmäisessä tapauksessa homman saa toimimaan erittäin helposti käyttämällä linuxin inotify -systeemiä. Eli siis Linuxin käyttöjärjestelmäydin ja tiedostojärjestelmät mahdollistavat sen, että jos esimerkiksi jotain tiedostoa muutetaan niin siitä syntyy inotify -tapahtuma, johon on mahdollista reagoida esimerkiksi suorittamalla jokin skripti aina kyseisen tapahtuman seurauksena. Esimerkiksi Debianissa on useitakin inotify -työkaluja, joilla on mahdollista laittaa haluttuja tiedotoja ja hakemistoja seurantaan ja tiedostojärjestelmältä tuleviin kyseisiin tiedostoihin tai hakemistoihin kohdistuviin ttapahtumiin voidaan sitten reagoida automaattisesti esimerkiksi suorittamalla jokin skripti Eli on täysin mahdollista automatisoida se, että jos jotain kuvaa päivitetään niin siitä luodaan uusi thumbnaili. automaattisesti. Esimerkiksi Debianissa voi hakea noita työkaluja esimerkiksi Synapticilla laittamalla hakusanaksi inotify.

    T. miksuh

    Äänestä

  • Anonyymi kirjoitti:

    Riippuu nyt siitä haluatko, että päivittyneestä kuvasta tehdään thumbnaili vain sillon kun käyttäjä ajaa jonkin skriptin, vai haluatko että thumbnaili luodaan automaattisesti heti jos kuvaa muutetaan. Ensimmäiseen tapaukseen en tässä kommentoi. Jälkimmäisessä tapauksessa homman saa toimimaan erittäin helposti käyttämällä linuxin inotify -systeemiä. Eli siis Linuxin käyttöjärjestelmäydin ja tiedostojärjestelmät mahdollistavat sen, että jos esimerkiksi jotain tiedostoa muutetaan niin siitä syntyy inotify -tapahtuma, johon on mahdollista reagoida esimerkiksi suorittamalla jokin skripti aina kyseisen tapahtuman seurauksena. Esimerkiksi Debianissa on useitakin inotify -työkaluja, joilla on mahdollista laittaa haluttuja tiedotoja ja hakemistoja seurantaan ja tiedostojärjestelmältä tuleviin kyseisiin tiedostoihin tai hakemistoihin kohdistuviin ttapahtumiin voidaan sitten reagoida automaattisesti esimerkiksi suorittamalla jokin skripti Eli on täysin mahdollista automatisoida se, että jos jotain kuvaa päivitetään niin siitä luodaan uusi thumbnaili. automaattisesti. Esimerkiksi Debianissa voi hakea noita työkaluja esimerkiksi Synapticilla laittamalla hakusanaksi inotify.

    T. miksuh

    Pitkän jorinan sait aikaiseksi, kun ottaa huomioon mitä lukiessa jäi käteen;

    Debianissa on Synaptic
    ja että
    Synaptic hyväksyy inotify hakusanan

    Mainitsit myös että asian järjestäminen on helppoa, jäi kuitenkin epäselväksi, mitä tämä "helppous" on käytännössä. Ja jos kerta tähän on olemassa helppo ratkaisu, siitä voisi laittaa "helpon" esimerkin.

    Äänestä

Ennenvanhaan kun tiedostoja oli vähän oli tärkeetä tietää oliko ne muuttuneet
Nkyisin on helpompaa / nopeempaa vaihtaa tilalle muutama (satamiljoonaa) tiedostoa vaikka ihan varmuuden vuoksi kuin alkaa tutkimaan onko joku yksittäinen tiedosto muuttunut.

Äänestä
  • Miten se, että haluaa tietää onko tiedosto muuttunut on muka vain jotain ennen muinoin juttua? Kyllä esimerkiksi itse voin kekskiä paljonkin syitä miksi voit haluta tietää onko jotain tiedostoa muutettu.

    Ja kuten sanoin edellisessä viestissäni tiedostojen muuttamiseen reagoinnin voi automatisoida inotifyn avulla niin, että käyttäjän ei välttämättä tarvitse tehdä mitään kun käyttis voi tehdä halutun asian automaattisesti.

    T. miksuh

    Itselläni on tälläkin koneella tälläkin hetkellä käytössä inotifyyn perustuva automatisointi eräille tiedostoilleni ja hakemistoille.

    T. miksuh

    Äänestä

  • Anonyymi kirjoitti:

    Miten se, että haluaa tietää onko tiedosto muuttunut on muka vain jotain ennen muinoin juttua? Kyllä esimerkiksi itse voin kekskiä paljonkin syitä miksi voit haluta tietää onko jotain tiedostoa muutettu.

    Ja kuten sanoin edellisessä viestissäni tiedostojen muuttamiseen reagoinnin voi automatisoida inotifyn avulla niin, että käyttäjän ei välttämättä tarvitse tehdä mitään kun käyttis voi tehdä halutun asian automaattisesti.

    T. miksuh

    Itselläni on tälläkin koneella tälläkin hetkellä käytössä inotifyyn perustuva automatisointi eräille tiedostoilleni ja hakemistoille.

    T. miksuh

    pcmanfm tekijä Hon Jen Yee väittää
    että inotify on totaalisesti rikki?
    Mistä kernel versiosta alkaen ne Sun mielestä on saaneet sen toimimaan?

    Äänestä

  • Anonyymi kirjoitti:

    Miten se, että haluaa tietää onko tiedosto muuttunut on muka vain jotain ennen muinoin juttua? Kyllä esimerkiksi itse voin kekskiä paljonkin syitä miksi voit haluta tietää onko jotain tiedostoa muutettu.

    Ja kuten sanoin edellisessä viestissäni tiedostojen muuttamiseen reagoinnin voi automatisoida inotifyn avulla niin, että käyttäjän ei välttämättä tarvitse tehdä mitään kun käyttis voi tehdä halutun asian automaattisesti.

    T. miksuh

    Itselläni on tälläkin koneella tälläkin hetkellä käytössä inotifyyn perustuva automatisointi eräille tiedostoilleni ja hakemistoille.

    T. miksuh

    Tässä on vain pari esimerkkiä niistä monista tavoista joita itse käytän Debianissa sen automatisointiin mitä tehdään, jos jotakin tiedostoa muutetaan.

    1) Jos lataan webbiselaimella jonkin tiedoston netistä kotihakemistoni Downloads -hakemistoon niin käyttis huomaa sen ja lajittelee sen automaattisesti määrittelemieni sääntöjen perusteella tiettyyn alihakemistoon. Eli downloads -hakemistoni organisoituu automaattisesti.

    2) Kaikki Downloads -hakemistoon tallennetutuudet tiedostot tarkistetaan Linuxin ClamAv -virustorjunnan avulla automaattisesti

    3) Jos muutan kotihakemistossani olevassa dokumenttihakemistossa jotain tiedostoa käyttis huomaa, että haa tuota tiedostoa muutettiin ja tiedosto laitetaan versiohallintaan automaattisesti, eli mulla on aina versiohallinnassa historia dokumenttihakemistossa olevien tiedostojen muutoksista.

    jne jne jne

    T. miksuhe

    Äänestä

  • Anonyymi kirjoitti:

    pcmanfm tekijä Hon Jen Yee väittää
    että inotify on totaalisesti rikki?
    Mistä kernel versiosta alkaen ne Sun mielestä on saaneet sen toimimaan?

    En osaa sanoa mistä asti tai mitä tuo tyyppi on sanonut. Tiedän vain sen, että käytän tuota joka päivä. En toki epäile sitä, että tuota systeemiä ei voisi parantaa toki.

    T. miksuh

    Äänestä

  • Anonyymi kirjoitti:

    Tässä on vain pari esimerkkiä niistä monista tavoista joita itse käytän Debianissa sen automatisointiin mitä tehdään, jos jotakin tiedostoa muutetaan.

    1) Jos lataan webbiselaimella jonkin tiedoston netistä kotihakemistoni Downloads -hakemistoon niin käyttis huomaa sen ja lajittelee sen automaattisesti määrittelemieni sääntöjen perusteella tiettyyn alihakemistoon. Eli downloads -hakemistoni organisoituu automaattisesti.

    2) Kaikki Downloads -hakemistoon tallennetutuudet tiedostot tarkistetaan Linuxin ClamAv -virustorjunnan avulla automaattisesti

    3) Jos muutan kotihakemistossani olevassa dokumenttihakemistossa jotain tiedostoa käyttis huomaa, että haa tuota tiedostoa muutettiin ja tiedosto laitetaan versiohallintaan automaattisesti, eli mulla on aina versiohallinnassa historia dokumenttihakemistossa olevien tiedostojen muutoksista.

    jne jne jne

    T. miksuhe

    Käyttis mitään huomaa. kernel heittää herjaa. ja toimii hyvin yhdellä levyOSIOLLA mutta jos kyseessä joku MUUUU levy OSIO niin johan takkuaa...

    Äänestä

  • Anonyymi kirjoitti:

    Käyttis mitään huomaa. kernel heittää herjaa. ja toimii hyvin yhdellä levyOSIOLLA mutta jos kyseessä joku MUUUU levy OSIO niin johan takkuaa...

    Just joo, kumma kun en tuollaist huomaa. Ja itsellänihän levyt on ainaollut pilkottuna hyvinkin moneen osioon. Tälläkin koneella on: /, /usr, /höme, /var/,/tmp, /storage (omat musiikkit, leffat jne), /virtual (virtuaalikoneet),/opt ja swap

    T. miksuh

    Äänestä

  • Anonyymi kirjoitti:

    Käyttis mitään huomaa. kernel heittää herjaa. ja toimii hyvin yhdellä levyOSIOLLA mutta jos kyseessä joku MUUUU levy OSIO niin johan takkuaa...

    Itse käytän tietysti inotifyy koska nopee eikä kuluta turhaa tilaa / muistii
    Mutta pitää ymmärtää sen (omituisuuden) puutteet eikä tehdä hätäisiä johtopäätöksiä..
    Tiedosto voi olla muuttunut toisen levyn jollakin osiolla ja kernel ei mitään huomaa vaan menee "vanhalla" eikä graaffisen selaimen päivitys toimi (näyttää vanhaa tietoo?)
    kyllä noi Debian pohjaset varmaan käyttää kehittyneempää tapaa?
    Koska niiden käyttäjät ei tunnetusti mitään älyn jättiläisiä ole.

    Äänestä

  • Anonyymi kirjoitti:

    Just joo, kumma kun en tuollaist huomaa. Ja itsellänihän levyt on ainaollut pilkottuna hyvinkin moneen osioon. Tälläkin koneella on: /, /usr, /höme, /var/,/tmp, /storage (omat musiikkit, leffat jne), /virtual (virtuaalikoneet),/opt ja swap

    T. miksuh

    Siis typokorjauksena, tällä koneella on levyosiot:

    /, /usr, /var, /tmp, /home, /storage, /virtual, /opt ja swap

    T. miksuh

    Äänestä

Mutta, edelleen minä kaipaan sitä mainitsemaasi helppoa ratkaisua, joka automaattisesti kuvien muokkaamisen tuloksena päivittää pikkukuvatkin. Jos nyt antaisit esimerkin, vaikka sillä Debianin helpolla inotifyllä, niin pääsisi kokeilemaan.

Äänestä
  • Lisätäänpä etten halua ruveta osioimaan mitään, vaikka kuinka helppoa olisi, riittää kun ne pikkukuvat päivittyy automaattisesti muokkauksen jälkeen.

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä etten halua ruveta osioimaan mitään, vaikka kuinka helppoa olisi, riittää kun ne pikkukuvat päivittyy automaattisesti muokkauksen jälkeen.

    "riittää kun ne pikkukuvat päivittyy automaattisesti muokkauksen jälkeen"

    Täytyykö koneen muistin riittää myös muuhun toimintaan tuon lisäksi että Pikkukuvakkeet päivittyy 100 varmasti?

    Äänestä

Kommentoi aloitusta


koodaariko kirjoitti:

Jos minulla on vaikka tiedosto: kuva.jpg

Haluasin tehdä BASH skriptin, joka tarkistaa, onko kuva muuttunut viime kerrasta, jos on niin luoda uusi thumbnail. Miten tämä helppoiten onnistuu?

Voisi tietenkin kopioida kuvan toiseen hakemistoon ja sitten verrata sen alkuperäiseen. Mutta tällöin tarvitaan kaksi kopiota kuvasta. Mikä tietenkin vie tilaa ja ei ole kovin tehokasta.

Onko jotain parempaa tapaa? En haluaisi käyttää ohjelmointikieliä jos ei ole aivan pakko ja homma onnistuu helposti bashillakin.

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