Script bash: kopioi uudet kuvat SD-levyltä tietokoneelle

Joskus meidän on suoritettava toistuvia tehtäviä tietokoneellamme, jotka ajan myötä ovat tylsiä. Tietyissä tapauksissa voimme helpottaa työtämme hyödyntämällä meille sopivia komentosarjoja.

Tänään kirjoitan näyttämään sinulle bash-komentosarjan, joka ratkaisi tarpeen: kopioi uudet kuvat digitaalikamerastani SD-kortilta tietokoneeseen.

tilanne:

Joka kerta, kun minulla oli uusia kuvia ladattavaksi tietokoneelleni, tein seuraavat toimet:

1. Avaa hakemisto, jossa minulla on kuvat alihakemistoihin.

2. Luo uusi alihakemisto nykyisen päivämäärän nimellä muodossa vv.kk.dd

3. Siirry edellisen kerran luotuun alihakemistoon ja katso, mikä on viimeksi tallennettu kuva.

4. Kopioi uudet kuvat SD-kortilta äskettäin luotuun hakemistoon.

Tämä vie vain minuutin, mutta prosessin suorittaminen on helpompaa vain asettamalla kortti.

Minun on käytettävä korttia, koska en voi siirtää kuvia suoraan kamerasta USB: n kautta, koska Linuxille ei ole ohjaimia (kuten aina tapahtuu ...)

ratkaisu:

Luo bash-komentosarja, joka toimii seuraavasti:

1. Tarkista käynnistyksen yhteydessä, onko SD-kortti asennettu. Muuten se päättyy.

2. Siirry kuvien päähakemistoon ja etsi viimeinen. Tallenna nimesi muuttujaan.

3. Vertaa nykyistä päivämäärää viimeiseen hakemistoon, jos ne eroavat toisistaan, luo uusi hakemisto nykyisen päivämäärän nimellä muodossa "vv.kk.dd".

4. Siirry viimeiseen hakemistoon (ei uuteen, vaan vanhempaan) ja tallenna muuttujaan viimeksi siirretyn tiedoston nimi.

Tässä vaiheessa on tarpeen suodattaa tiedoston nimi, jotta sitä voidaan verrata kortin uusiin tiedostoihin lähitulevaisuudessa. Tiedostoilla on seuraava muoto: xxx_xxxx.eee Missä: x = numero 0-9 ja eee = laajennus (JPG, MOV). Esimerkiksi: 100_5684.JPG, 100_5699.MOV. Suodattimen jälkeen nimi pysyy xxxxxxx Siksi yllä olevassa esimerkissä meillä olisi: 1005684, 1005699.

Koska hakemisto voi sisältää muun tyyppisiä tiedostoja tai muutetuilla nimillä, suodatinta käytetään.

5. Siirry kortille ja suodata tiedostot edellisen kohdan mukaisesti.

6. Vertaa kortin tiedostoja muuttujaan, joka sisältää viimeksi edellisen kerran siirretyn tiedoston (kohta 4) ja kopioi nimetyt tiedostot äskettäin luotuun hakemistoon suurempi kuin muuttuja. (koska nimet ovat vain numeroita).

7. Avaa hakemisto, joka sisältää uudet kuvat, tiedostonhallinnalla.

Seuraavaksi näytän käsikirjoituksen kommenteilla, jotka selittävät sen toiminnan. Selvennän, etten ole ohjelmoija, ja se aiheutti minulle useita päänsärkyä, kunnes sain sen toimimaan, varsinkin kun minun piti suodattaa "for" -silmukan nimet.

#! / bin / bash ### --- TARKISTA, JOS SD ON ASENNETTU --- ### SD = / media / KODAK / DCIM / 100Z8612 jos [[-d $ SD]]; sitten ### --- LUO HAKEMISTO --- ### #Lue kuvahakemisto ja luo uusi nimi nykyisen päivämäärän ja käyttöoikeuksien 755 nimellä, jos sitä ei ole. cd ~ / Pictures / kodak ULTDIR = `ls -1 | tail -n1` # viimeinen hakemisto luettelossa. DATE = `päivämäärä +% y.% M.% D` # Nykyinen päivämäärä VV.KK.PP-muodossa, jos [" $ LASTDIR "! =" $ DATE "]; sitten mkdir -vm 755`pvm +% y.% m.% d` # luo hakemisto nykyisellä päivämäärällä fi ### --- NÄKY $ ULTDIRIN VIIMEINEN TIEDOSTO --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | häntä -n1 | leikkaa -c1-3,5-8 "# katso viimeinen kuva nimeltä xxx_XXXX.eee .eee = tiedostotunniste (JPG tai MOV) # Varmista, että komentosarja toimii sen jälkeen, kun se on täytetty: # 100_9999.eee - > 101_0000.eee ja virheitä ei ole # Leikkaa niin, että se on muodossa xxxXXXX ### --- SIIRRY LUETTELON VIIMEISEEN HAKEMISTOON --- ### # TAI Äskettäin luotu, jollei # cd luotu .. LAST = `ls -1 | tail -n1` # palaa uudestaan, koska muuten se vie edellisen ULTDIR: n if cd / media / KODAK / DCIM / 100Z8612 ### --- SUODATA SD-tiedostot --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] "### - - VERTAA UUSIA TIEDOSTOJA NIMEN KANSSA, KUIN ON VIIMEISIN --- --- ### for I: ssä $ FILTER: ssä do N = `kaiku $ I | leikkaa -c1-3,5-8 "#Leikkaa nimi, jos [[" $ ULTIMG "-lt" $ N "]]; sitten cp $ I ~ / Pictures / kodak / $ ULTDIR fi tehty thunar ~ / Pictures / kodak / $ ULTDIR #Avaa uusi hakemisto Thunar else exit -toiminnolla 0 fi exit 0

Viimeinkin saadaksesi sen toimimaan, lisäsin sen Xfcen valikkoon "Siirrettävät asemat ja media" -sovellukseen

Asetukset → Xfce 4 Asetusten hallinta → Irrotettavat asemat ja media → Kamerat

käyttämällä tuontikuvavaihtoehtoa. Kun asetan kortin, valintaikkuna kysyy, haluan tuoda kuvat. Hyväksyessä komentosarja suoritetaan.

No, se siinä. Anteeksi tekstin sotkuisuudesta, se on ensimmäinen viestini, enkä tiedä, miten komentosarjaa taulukoitaan muokatessani sitä. Toivon, että jollekin on hyödyllistä ainakin saada idea ja mukauttaa se jokaiseen tapaukseen.

En lisensoinut, koska en ole ilmoittanut itselleni hyvin jokaisesta GPL-versiosta, mutta heillä on oikeus kopioida ja muokata sitä. Ja sanokaa vapaasti, miten sitä voitaisiin parantaa tai onko muita tapoja tehdä sama, mutta helpompaa.

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   Percaff_TI99 dijo

    Erittäin mielenkiintoinen Joaquín, hyvä idea on ladata komentosarja pastaan, jolloin koodin jakaminen on helpompaa, ja kuten sanot, se voidaan mukauttaa muihin tarpeisiin ja opitaan käyttämään bashia hieman enemmän.

    Tervehdys!

    1.    Joaquin dijo

      Valmis, lisätty http://paste.desdelinux.net/4737
      Kiitos!

  2.   vr_rv dijo

    Kun kopioit valokuvaa, joka on jo hakemistossa, se ei osoita sitä, että sellainen on jo olemassa, ja antaa sinulle mahdollisuuden korvata se tai olla kopioimatta sitä?

    Joka tapauksessa se on erittäin hyödyllinen, koska se tekee kaiken automaattisesti

    1.    Joaquin dijo

      Hei. Se ei oikeastaan ​​kopioi toistuvia kuvia, vaan vain ohittaa ne. Idea oli nimenomaan kopioida uudet tiedostot ilman käyttäjän vuorovaikutusta. Lisäksi, ellet lisää kuvia useammin kuin kerran päivässä, komentosarja kopioi uudet tiedostot uuteen hakemistoon. Selitän lyhyesti:

      Tänään on 10, luon hakemiston nimeltä 03/13/13.03.10 ja kopioin joitain kuvia tai videoita (MOV) sisälle: 100_4440.JPG, 100_4441.JPG, 100_4442.MOV, 100_4445.JPG
      (Puuttuvat 4443 ja 4444 pyyhittiin kameralla, viimeinen on 4445).

      Oletetaan sitten, että käytän käsikirjoitusta 01 ja kortilla on uusia kuvia. Komentosarja luo hakemiston nimeltä 04 ja uusien kuvien / videoiden sisälle, joiden nimi on suurempi kuin "13"; koska se lukee hakemiston 13.04.01 ja viimeinen kuva on 4445_13.03.10.JPG. Jos suoritan komentosarjan uudet kuvat kortilta samana päivänä, ne lisätään hakemistoon 100. Kukaan ei ole korvattu.

      Toivon, että olen selkeyttänyt ajatustani hieman 🙂

  3.   Manuti dijo

    Etkö tiedä Rapid Photo Downloader -ohjelmaa? Mielestäni se tekee kaiken tämän ja enemmän.

    1.    Herra Black dijo

      Asia on, että laiha mies teki sen itse, hänellä olisi ollut hauskaa luulisin ja se voi palvella jotakuta muuta

    2.    Joaquin dijo

      Hei. En tiennyt sitä ja se näyttää hyvältä siitä, mitä näin Internetissä, mutta itse asiassa käsikirjoitus täyttää täydellisesti mitä tarvitsen; mikä on kortin asettaminen ja kaikkien tiedostojen kopioiminen automaattisesti.

      Se auttoi minua myös oppimaan hieman enemmän, koska se ei tietenkään toiminut ensimmäistä kertaa; Virheitä tapahtui ja niistä opitaan paljon.

      En aikonut näyttää komentosarjaa ongelmien ratkaisemiseksi muille, on mainitsemiesi kaltaisia ​​sovelluksia, jotka ovat yleisempiä. Jaoin sen lukemiseen ja viitteeksi uusien asioiden luomiseen silmukoiden (tässä tapauksessa "for") ja säännöllisten lausekkeiden (muuttujat "ULTIMG" ja "FILTER" avulla komentosarjassa).

  4.   koodilevy dijo

    Se näyttää hyödylliseltä, pidän sen, jos tarvitsen sitä jonain päivänä. Kiitos.

    1.    Joaquin dijo

      Kiitos!

  5.   nimettömänä dijo

    mutta sitä varten meillä on jo grsync

    1.    Joaquin dijo

      Kyllä, mutta mielestäni rsynciä käytetään enemmän varmuuskopiointiin. En ole koskaan katsonut sitä, mutta se on sovellus, joka meidän tulisi ottaa huomioon ja oppia meiltä kaikilta.

      En tiennyt, että rsyncille on graafinen käyttöliittymä.

  6.   viimeinen aloittelija dijo

    Vau, mielestäni koodi on erittäin mielenkiintoinen, erittäin hyödyllinen. jatka samoin. 😀
    Pidän sen, jos tarvitsen sitä.

    Tervehdys.

    1.    Joaquin dijo

      Kiitos!.