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.
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.
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!
Valmis, lisätty http://paste.desdelinux.net/4737
Kiitos!
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
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 🙂
Etkö tiedä Rapid Photo Downloader -ohjelmaa? Mielestäni se tekee kaiken tämän ja enemmän.
Asia on, että laiha mies teki sen itse, hänellä olisi ollut hauskaa luulisin ja se voi palvella jotakuta muuta
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).
Se näyttää hyödylliseltä, pidän sen, jos tarvitsen sitä jonain päivänä. Kiitos.
Kiitos!
mutta sitä varten meillä on jo grsync
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ä.
Vau, mielestäni koodi on erittäin mielenkiintoinen, erittäin hyödyllinen. jatka samoin. 😀
Pidän sen, jos tarvitsen sitä.
Tervehdys.
Kiitos!.