Script Bash: kopirajte nove slike sa SD-a na računalo

Ponekad moramo izvoditi ponavljajuće zadatke na računalu, koji s vremenom postaju zamorni. U određenim slučajevima možemo olakšati svoj rad koristeći se skriptama koje rade za nas.

Danas vam pišem kako bih vam pokazao bash skriptu koja je riješila potrebu: kopirajte nove slike s mog digitalnog fotoaparata sa SD kartice na računalo.

Situacija:

Svaki put kad bih imao nove slike za preuzimanje na računalo, učinio bih sljedeće:

1. Otvorite direktorij u kojem imam slike razvrstane u poddirektorijume.

2. Stvorite novi poddirektorij s imenom trenutnog datuma u formatu yy.mm.dd

3. Pomaknite se na poddirektorij stvoren prethodni put i pogledajte koja je zadnja spremljena slika.

4. Kopirajte nove slike sa SD kartice u novostvoreni direktorij.

To traje ne više od minute, ali postupak je lakše učiniti jednostavnim umetanjem kartice.

Moram koristiti karticu jer ne mogu izravno prenijeti slike s fotoaparata putem USB-a, jer ne postoje upravljački programi za Linux (kao što se uvijek događa ...)

rješenje:

Stvorite bash skriptu koja radi sljedeće:

1. Prilikom pokretanja provjerite je li SD kartica montirana. Inače završava.

2. Idite u glavni direktorij slika i pronađite posljednji. Spremite svoje ime u varijablu.

3. Usporedite trenutni datum sa zadnjim direktorijumom, ako se razlikuju, stvorite novi direktorij s imenom trenutnog datuma u formatu "yy.mm.dd".

4. Premjestite se u zadnji direktorij (ne novi, već stariji) i u varijablu spremite ime posljednje datoteke prenesene prethodni put.

U ovom koraku potrebno je filtrirati naziv datoteke kako biste ga mogli u bliskoj budućnosti usporediti s novim datotekama na kartici. Datoteke imaju sljedeći format: xxx_xxxx.eee Gdje su: x = znamenka 0 do 9 i eee = produžetak (JPG, MOV). Na primjer: 100_5684.JPG, 100_5699.MOV. Nakon filtra, naziv ostaje xxxxxxx Stoga bismo u gornjem primjeru imali: 1005684, 1005699.

Budući da direktorij može sadržavati druge vrste datoteka ili s promijenjenim imenima, koristi se filtar.

5. Pomaknite se na karticu i filtrirajte datoteke kao u prethodnoj točki.

6. Usporedite datoteke na kartici s varijablom koja sadrži zadnju datoteku prenesenu prethodni put (točka 4) i kopirajte imenovane datoteke u novostvoreni direktorij veći od varijable. (budući da su imena samo brojevi).

7. Otvorite direktorij koji sadrži nove slike pomoću upravitelja datoteka.

Dalje ću vam pokazati skriptu s komentarima koji objašnjavaju kako to funkcionira. Pojašnjavam da nisam programer i zadavao mi je nekoliko glavobolja dok nisam počeo raditi, pogotovo kad sam morao filtrirati imena za petlju "for".

#! / bin / bash ### --- PROVJERITE AKO SE SD NAMESTI --- ### SD = / media / KODAK / DCIM / 100Z8612 ako je [[-d $ SD]]; zatim ### --- STVORI DIRECTORY --- ### # Pročitajte direktorij slika i stvorite drugi s imenom # trenutnog datuma i dozvolama 755 ako ne postoji. cd ~ / Slike / kodak ULTDIR = `ls -1 | tail -n1` # zadnji direktorij na popisu. DATUM = `datum +% g.% M.% D` # Trenutni datum u YY.MM.DD formatu ako [" $ LASTDIR "! =" $ DATE "]; zatim mkdir -vm 755`date +% y.% m.% d` # stvori direktorij s trenutnim datumom fi ### --- VIDI POSLJEDNJU DATOTEKU $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | rep -n1 | cut -c1-3,5-8` # pogledajte zadnju sliku s imenom xxx_XXXX.eee .eee = proširenje datoteke (JPG ili MOV) # Da biste osigurali da skripta radi nakon što je ispunjena: # 100_9999.eee -> 101_0000. eee i nema grešaka # REZI tako da bude u formatu xxxXXXX ### --- PREMIJESTI SE DO POSLJEDNJEG IMENIKA POPISA --- ### # ILI NEDAVNO STVORENOG, AKO JE # Cd stvoren .. POSLJEDNJI = `ls -1 | tail -n1` # ide opet jer u protivnom treba prethodni ULTDIR if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTRIRANJE datoteka u SD --- ### FILTER = `ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - USPOREDITE NOVE DATOTEKE S IMENOM VELIKIM OD POSLJEDNJEG --- ### za I u $ FILTER do N = `echo $ I | izrezati -c1-3,5-8` # Ime izreza ako [["$ ULTIMG" -lt "$ N"]]; zatim cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR #Otvorite novi direktorij s Thunar else exit 0 fi exit 0

Konačno, da bi to uspjelo, dodao sam ga u Xfceovu aplikaciju "Izmjenjivi pogoni i mediji" u izborniku

Postavke → Upravitelj postavki Xfce 4 → Izmjenjivi pogoni i mediji → Fotoaparati

pomoću opcije uvoza slike. Kad umetnem karticu, u dijaloškom okviru pita se želim li uvesti slike. Nakon prihvaćanja, skripta se izvršava.

Pa to je to. Oprostite na neurednosti teksta, to je moj prvi post i ne znam kako tabelirati skriptu pri uređivanju. Nadam se da je nekome korisno barem imati ideju i prilagoditi je svakom konkretnom slučaju.

Nisam licencirao jer nisam dobro naučio svaku verziju GPL-a, ali je mogu kopirati i mijenjati. I ne ustručavajte se reći kako bi se to moglo poboljšati ili postoje drugi načini da se to učini, ali lakše.

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Percaff_TI99 dijo

    Vrlo zanimljiv Joaquín, dobra ideja je prenijeti skriptu u tijesto gdje je lakše podijeliti kôd, a kako kažete, može se prilagoditi drugim potrebama i čovjek nauči malo više koristiti bash.

    Pozdrav!

    1.    Joaquin dijo

      Gotovo, dodano u http://paste.desdelinux.net/4737
      Gracias!

  2.   vr_rv dijo

    Kada kopirate fotografiju koja se već nalazi u direktoriju, to ne znači da je već postoji i daje vam mogućnost da je zamijenite ili ne kopirate?

    Svejedno je vrlo korisno, jer sve radi automatski

    1.    Joaquin dijo

      Bok. Zapravo ne kopira ponavljajuće slike, već ih samo ignorira. Ideja je bila upravo kopirati nove datoteke bez potrebe za korisničkom interakcijom. Također, ako slike ne dodate više od jednom dnevno, skripta kopira nove datoteke u novi direktorij. Ukratko objašnjavam:

      Danas je 10/03/13, kreiram direktorij koji se zove 13.03.10/100/4440 i kopiram neke slike ili video (MOV) unutra: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (Nestali 4443 i 4444 izbrisani su fotoaparatom, posljednji je 4445).

      Onda pretpostavim da koristim skriptu 01. I da na kartici imam nove slike. Skripta stvara direktorij pod nazivom 04 i unutar novih slika / videozapisa čiji je naziv veći od "13"; jer čita direktorij 13.04.01, a zadnja slika je 4445_13.03.10.JPG. Ako istog dana ponovim skriptu s novim slikama s kartice, one se dodaju u direktorij 100. Nijedna nije prepisana.

      Nadam se da sam malo razjasnio svoju ideju 🙂

  3.   Manuti dijo

    A ne znate Rapid Photo Downloader? Mislim da čini sve to i još više.

    1.    Mr Black dijo

      Poanta je u tome da je mršavi čovjek to sam učinio, valjda bi se zabavio i to može poslužiti nekom drugom

    2.    Joaquin dijo

      Bok. Nisam to znao i čini mi se dobro prema onome što sam vidio na internetu, ali zapravo skripta savršeno ispunjava ono što trebam; a to je umetanje kartice i automatsko kopiranje svih datoteka.

      Pomoglo mi je i da naučim malo više jer očito nije uspjelo prvi put; Dogodile su se greške i od njih se puno nauči.

      Nisam mislio pokazati skriptu za rješavanje problema drugima, postoje aplikacije poput onih koje spominjete i koje su općenitije. Podijelio sam ga s vama za čitanje i kao referencu za stvaranje novih stvari koristeći petlje (u ovom slučaju "za") i regularne izraze (varijable "ULTIMG" i "FILTER" u skripti)

  4.   laboratorij za kodiranje dijo

    Čini se korisnim, čuvam ga u slučaju da mi jednog dana zatreba. Hvala vam.

    1.    Joaquin dijo

      Gracias!

  5.   bez imena dijo

    ali za to već imamo grsync

    1.    Joaquin dijo

      Da, ali mislim da se rsync više koristi za izradu sigurnosnih kopija. Nikad ga nisam gledao, ali to je aplikacija koju bismo trebali uzeti u obzir i učiti od svih nas.

      Nisam znao da postoji grafičko sučelje za rsync.

  6.   zadnjinewbie dijo

    Wow, smatram da je kod vrlo zanimljiv, vrlo koristan. samo tako nastavi. 😀
    Zadržat ću ga u slučaju da mi zatreba.

    Pozdrav.

    1.    Joaquin dijo

      Hvala vam!.