Script bash: kopier nye bilder fra SD til PC

Noen ganger trenger vi å utføre repeterende oppgaver på PCen vår, som over tid blir kjedelige. I visse tilfeller kan vi lette arbeidet vårt ved å bruke skript som fungerer for oss.

I dag skriver jeg for å vise deg et bash-skript som løste et behov: kopier nye bilder fra digitalkameraet mitt fra et SD-kort til PCen.

Situasjon:

Hver gang jeg hadde nye bilder å laste ned til datamaskinen min, gjorde jeg følgende:

1. Åpne katalogen der jeg har bildene klassifisert i underkataloger.

2. Opprett en ny underkatalog med navnet på gjeldende dato, i formatet yy.mm.dd

3. Gå til underkatalogen som ble opprettet forrige gang, og se hva som er det siste bildet som ble lagret.

4. Kopier de nye bildene fra SD-kortet til den nylig opprettede katalogen.

Dette tar ikke mer enn et minutt, men det er lettere for prosessen å bare gjøre det ved å sette inn kortet.

Jeg må bruke kortet fordi jeg ikke kan overføre bildene direkte fra kameraet via USB, siden det ikke er drivere for Linux (som alltid skjer ...)

Løsning:

Lag et bash-skript som gjør følgende:

1. Bekreft ved oppstart om SD-kortet er montert. Ellers slutter det.

2. Gå til hovedkatalogen med bilder og finn den siste. Lagre navnet ditt i en variabel.

3. Sammenlign gjeldende dato med den siste katalogen, hvis de er forskjellige, opprett en ny katalog med navnet på den gjeldende datoen i "yy.mm.dd" -format.

4. Gå til den siste katalogen (ikke den nye, men en eldre) og lagre navnet på den siste filen som ble overført forrige gang i en variabel.

I dette trinnet er det nødvendig å filtrere navnet på filen slik at den kan sammenlignes med de nye filene på kortet i nær fremtid. Filene har følgende format: xxx_xxxx.eee Hvor: x = siffer 0 til 9 og eee = utvidelse (JPG, MOV). For eksempel: 100_5684.JPG, 100_5699.MOV. Etter filteret forblir navnet xxxxxxx Derfor, i eksemplet ovenfor, ville vi ha: 1005684, 1005699.

Siden katalogen kan inneholde andre typer filer eller med endrede navn, brukes filteret.

5. Gå til kortet og filtrer filene som i forrige punkt.

6. Sammenlign filene på kortet med variabelen som inneholder den siste filen som ble overført forrige gang (punkt 4) og kopier de nevnte filene til den nylig opprettede katalogen større enn variabelen. (siden navn bare er tall).

7. Åpne katalogen som inneholder de nye bildene med filbehandling.

Nedenfor viser jeg deg skriptet med kommentarer som forklarer hvordan det fungerer. Jeg presiserer at jeg ikke er programmerer, og det ga meg flere hodepine til jeg fikk det til å fungere, spesielt da jeg måtte filtrere navnene til "for" -sløyfen.

#! / bin / bash ### --- VERIFISER HVIS SD MONTERES --- ### SD = / media / KODAK / DCIM / 100Z8612 hvis [[-d $ SD]]; deretter ### --- CREATE DIRECTORY --- ### #Les katalog med bilder og opprett en annen med navnet på #current date and permissions 755 hvis den ikke eksisterer. cd ~ / Bilder / kodak ULTDIR = `ls -1 | tail -n1` # siste katalog i listen. DATE = `date +% y.% M.% D` # Gjeldende dato i YY.MM.DD-format hvis [" $ LASTDIR "! =" $ DATE "]; deretter mkdir -vm 755`dato +% y.% m.% d` # opprett katalog med gjeldende dato fi ### --- SE SISTE FIL AV $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | hale -n1 | klipp -c1-3,5-8` # se det siste bildet med navnet xxx_XXXX.eee .eee = filtypen (JPG eller MOV) # For å sikre at skriptet fungerer etter at det er oppfylt: # 100_9999.eee -> 101_0000. eee og det er ingen feil # CUT slik at den er i formatet xxxXXXX ### --- FLYTT TIL LISTE SIKKERHETSDIREKTOR --- ### # ELLER DEN NYE LAGET, HVIS # cd ble OPPRETT .. SISTE = `ls -1 | hale -n1` # går igjen fordi ellers tar den forrige ULTDIR av if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER filene i SD --- ### FILTER = `ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - SAMMENLIGNE NYE FILER MED NAVN STØRRERE ENN SISTE --- ### for jeg i $ FILTER gjør N = `ekko $ I | klipp -c1-3,5-8` #Kutt navn hvis [["$ ULTIMG" -lt "$ N"]]; deretter cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Åpne den nye katalogen med Thunar else exit 0 fi exit 0

Endelig for å få det til å fungere, la jeg det til Xfces "Removable Drives and Media" -applikasjon i menyen

Innstillinger → Xfce 4 Innstillingsbehandling → Flyttbare stasjoner og media → Kameraer

ved hjelp av alternativet importbilde. Når jeg setter inn kortet, blir det spurt en dialogboks om jeg vil importere bildene. Når du godtar, blir skriptet utført.

Vel, det er det. Beklager den rotete teksten, det er mitt første innlegg, og jeg vet ikke hvordan jeg skal tabulere skriptet når jeg redigerer det. Jeg håper det er nyttig for noen i det minste å ha en idé og tilpasse den til hvert enkelt tilfelle.

Jeg ga ikke lisens fordi jeg ikke har informert meg godt om hver versjon av GPL, men de har frihet til å kopiere og endre den. Og si gjerne hvordan det kan forbedres, eller om det er andre måter å gjøre det samme, men enklere.

13 kommentarer, legg igjen dine

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Percaff_TI99 sa

    Veldig interessant Joaquín, en god idé er å laste opp skriptet i lim der det er lettere å dele koden, og som du sier kan det tilpasses andre behov og man lærer å bruke bash litt mer.

    Greetings!

    1.    Joaquin sa

      Ferdig, lagt til http://paste.desdelinux.net/4737
      Takk!

  2.   vr_rv sa

    Når du kopierer et fotografi som allerede er i katalogen, betyr det ikke at det allerede er et og gir deg muligheten til å erstatte det eller ikke kopiere det?

    Uansett er det veldig nyttig, siden det gjør alt automatisk

    1.    Joaquin sa

      Hei. Det kopierer faktisk ikke gjentatte bilder, det ignorerer dem bare. Tanken var nettopp å kopiere de nye filene uten behov for brukerinteraksjon. Med mindre du legger til bilder mer enn en gang om dagen, kopierer skriptet de nye filene til en ny katalog. Jeg forklarer kort:

      I dag er 10/03/13, jeg oppretter en katalog som heter 13.03.10/100/4440 og kopierer noen bilder eller video (MOV) inne: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (De manglende 4443 og 4444 ble slettet med kameraet, den siste er 4445).

      Anta at jeg bruker skriptet 01/04/13 og har nye bilder på kortet. Skriptet oppretter en katalog kalt 13.04.01 og inne i de nye bildene / videoene med navnet større enn "4445"; fordi den leser katalogen 13.03.10 og det siste bildet er 100_4445.JPG. Hvis jeg kjører skriptet på nytt med nye kortbilder samme dag, blir de lagt til i katalogen 13.04.01. Ingen blir overskrevet.

      Jeg håper jeg har avklart ideen min litt 🙂

  3.   Manuti sa

    Og du kjenner ikke Rapid Photo Downloader? Jeg tror det gjør alt dette og mer.

    1.    Herr Black sa

      Poenget er at den tynne mannen gjorde det selv, han hadde hatt det gøy antar jeg, og det kan tjene noen andre

    2.    Joaquin sa

      Hei. Jeg visste det ikke og det virker bra ut fra det jeg så på internett, men i virkeligheten oppfyller manuset perfekt det jeg trenger; som er å sette inn kortet og få alle filene kopiert automatisk.

      Det hjalp meg også til å lære litt mer fordi det tydeligvis ikke fungerte første gang; Det skjedde feil og mye læres av dem.

      Jeg hadde ikke tenkt å vise manuset for å løse problemer for andre, det er applikasjoner som de du nevner som er mer generelle. Jeg delte det for deg å lese og som referanse for å lage nye ting ved hjelp av sløyfer (i dette tilfellet "for") og regulære uttrykk (variabler "ULTIMG" og "FILTER" i skriptet)

  4.   kodelab sa

    Det virker nyttig, jeg beholder det i tilfelle jeg trenger det en dag. Takk skal du ha.

    1.    Joaquin sa

      Takk!

  5.   ikke navngitt sa

    men for det har vi allerede grsync

    1.    Joaquin sa

      Ja, men jeg tror rsync brukes mer til sikkerhetskopiering. Jeg har aldri sett på det, men det er en applikasjon som vi bør ta hensyn til og lære av oss alle.

      Jeg visste ikke at det var et grafisk grensesnitt for rsync.

  6.   siste nybegynner sa

    Wow, jeg synes koden er veldig interessant, veldig nyttig. fortsett det. 😀
    Jeg beholder det i tilfelle jeg trenger det.

    Hilsener.

    1.    Joaquin sa

      Takk skal du ha!.