Script Bash: kopiera nya bilder från SD till PC

Ibland behöver vi utföra repetitiva uppgifter på vår dator, som med tiden blir tråkiga. I vissa fall kan vi underlätta vårt arbete genom att använda skript som fungerar för oss.

Idag skriver jag för att visa dig ett bash-skript som löste ett behov: kopiera nya bilder från min digitalkamera från ett SD-kort till datorn.

situation:

Varje gång jag hade nya bilder att ladda ner till min dator skulle jag göra följande:

1. Öppna katalogen där jag har bilderna klassificerade i underkataloger.

2. Skapa en ny underkatalog med namnet på det aktuella datumet i formatet yy.mm.dd

3. Gå till den underkatalog som skapades förra gången och se vad som är den senast sparade bilden.

4. Kopiera de nya bilderna från SD-kortet till den nyskapade katalogen.

Det tar inte mer än en minut, men det är lättare för processen att bara sätta in kortet.

Jag måste använda kortet eftersom jag inte kan överföra bilderna direkt från kameran via USB, eftersom det inte finns några Linux-drivrutiner (som alltid händer ...)

lösning:

Skapa ett bash-skript som gör följande:

1. Kontrollera vid start om SD-kortet är monterat. Annars slutar det.

2. Gå till huvudkatalogen med bilder och hitta den sista. Spara ditt namn i en variabel.

3. Jämför det aktuella datumet med den sista katalogen, om de skiljer sig åt, skapa en ny katalog med namnet på det aktuella datumet i "yy.mm.dd" -format.

4. Gå till den sista katalogen (inte den nya utan en äldre) och spara namnet på den senast överförda filen i en variabel.

I det här steget är det nödvändigt att filtrera namnet på filen för att kunna jämföra den med de nya filerna på kortet inom en snar framtid. Filerna har följande format: xxx_xxxx.eee Var: x = siffra 0 till 9 och eee = förlängning (JPG, MOV). Till exempel: 100_5684.JPG, 100_5699.MOV. Efter filtret förblir namnet xxxxxxx Därför skulle vi i exemplet ovan ha: 1005684, 1005699.

Eftersom katalogen kan innehålla andra typer av filer eller med ändrade namn används filtret.

5. Flytta till kortet och filtrera filerna som i föregående punkt.

6. Jämför filerna på kortet med variabeln som innehåller den senast överförda filen förra gången (punkt 4) och kopiera de namngivna filerna till den nyskapade katalogen större än variabeln. (eftersom namnen bara är siffror).

7. Öppna katalogen som innehåller de nya bilderna med filhanteraren.

Nedan visar jag manuset med kommentarer som förklarar hur det fungerar. Jag klargör att jag inte är programmerare och det gav mig flera huvudvärk tills jag fick det att fungera, särskilt när jag var tvungen att filtrera namnen för "för" -slingan.

#! / bin / bash ### --- VERIFIERA OM SD MONTERAS --- ### SD = / media / KODAK / DCIM / 100Z8612 om [[-d $ SD]]; sedan ### --- CREATE DIRECTORY --- ### #Läs katalogen med bilder och skapa en annan med namnet på #current date och behörigheter 755 om den inte finns. cd ~ / Bilder / kodak ULTDIR = `ls -1 | tail -n1` # sista katalogen i listan. DATE = `date +% y.% M.% D` # Aktuellt datum i YY.MM.DD-format om [" $ LASTDIR "! =" $ DATE "]; sedan mkdir -vm 755`datum +% y.% m.% d` # skapa katalog med aktuellt datum fi ### --- SE SISTA 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] | svans -n1 | klipp -c1-3,5-8` # se den sista bilden med namnet xxx_XXXX.eee .eee = filtillägg (JPG eller MOV) # För att säkerställa att skriptet fungerar efter det att det har uppfyllts: # 100_9999.eee - > 101_0000.eee och det finns inga fel # CUT så att det är i formatet xxxXXXX ### --- FLYTT TILL LISTAENS SIDA KORT --- ### # ELLER DEN NYA SKAPADE, OM # cd skapades .. SISTA = `ls -1 | svans -n1` # går igen eftersom det annars tar den tidigare ULTDIR av if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER filerna i SD --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - JÄMFÖR NYA FILER MED NAMN STÖRRE ÄN SENAST --- ### för I i $ FILTER gör N = `echo $ I | klipp -c1-3,5-8` #Cut namn om [["$ ULTIMG" -lt "$ N"]]; sedan cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Öppna den nya katalogen med Thunar else exit 0 fi exit 0

Slutligen för att få det att fungera lade jag till det i Xfces applikation "Removable Drives and Media" i menyn

Inställningar → Xfce 4 Inställningshanterare → Flyttbara enheter och media → Kameror

med hjälp av alternativet importbild. När jag sätter in kortet frågar en dialogruta om jag vill importera bilderna. När du accepterar körs skriptet.

Jo det är det. Ledsen för textens rörighet, det är mitt första inlägg och jag vet inte hur man ska tabulera skriptet när jag redigerar det. Jag hoppas att det är användbart för någon åtminstone att ha en idé och anpassa den till varje enskilt fall.

Jag licensierade inte eftersom jag inte har informerat mig själv om varje version av GPL, men de har rätt att kopiera och modifiera den. Och gärna säga hur det kan förbättras eller om det finns andra sätt att göra detsamma, men lättare.

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Percaff_TI99 sade

    Mycket intressant Joaquín, en bra idé är att ladda upp skriptet i klistra in där det är lättare att dela koden, och som du säger kan det anpassas till andra behov och man lär sig att använda bash lite mer.

    Hälsningar!

    1.    Joaquin sade

      Klar, tillagd i http://paste.desdelinux.net/4737
      Tack!

  2.   vr_rv sade

    När du kopierar ett fotografi som redan finns i katalogen indikerar det inte att det redan finns ett och ger dig möjlighet att ersätta det eller inte kopiera det?

    Hur som helst är det mycket användbart, eftersom det gör allt automatiskt

    1.    Joaquin sade

      Hej. Det kopierar faktiskt inte upprepade bilder, det ignorerar dem bara. Tanken var just att kopiera de nya filerna utan behov av användarinteraktion. Om du inte lägger till bilder mer än en gång om dagen, kopierar manuset de nya filerna till en ny katalog. Jag förklarar kort:

      Idag är 10/03/13, jag skapar en katalog som heter 13.03.10/100/4440 och kopierar några bilder eller video (MOV) inuti: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (de saknade 4443 och 4444 raderades med kameran, den sista är 4445).

      Antag att jag använder skriptet den 01/04/13 och har nya bilder på kortet. Skriptet skapar en katalog som heter 13.04.01 och inuti de nya bilderna / videoklippen vars namn är större än "4445"; eftersom den läser katalogen 13.03.10 och den sista bilden är 100_4445.JPG. Om jag kör om skriptet med nya bilder från kortet samma dag läggs de till i katalogen 13.04.01. Ingen skrivs över.

      Jag hoppas att jag har klargjort min idé lite a

  3.   Manuti sade

    Och du känner inte Rapid Photo Downloader? Jag tror att det gör allt detta och mer.

    1.    Herr Black sade

      Poängen är att den mager mannen gjorde det själv, han skulle ha haft kul antar jag och det kan tjäna någon annan

    2.    Joaquin sade

      Hej. Jag visste inte det och det verkar bra utifrån vad jag såg på internet, men i verkligheten uppfyller manuset perfekt det jag behöver; vilket är att sätta i kortet och kopiera alla filer automatiskt.

      Det hjälpte mig också att lära mig lite mer eftersom det självklart inte fungerade första gången; Fel inträffade och mycket lärs av dem.

      Jag tänkte inte visa skriptet för att lösa problem för andra, det finns applikationer som de du nämner som är mer generella. Jag delade det för dig att läsa och som referens för att skapa nya saker med slingor (i detta fall "för") och reguljära uttryck (variabler "ULTIMG" och "FILTER" i manuset)

  4.   kodlab sade

    Det verkar användbart, jag behåller det om jag behöver det en dag. Tack.

    1.    Joaquin sade

      Tack!

  5.   icke namngiven sade

    men för det har vi redan grsync

    1.    Joaquin sade

      Ja, men jag tror att rsync används mer för säkerhetskopior. Jag har aldrig tittat på det men det är en applikation som vi bör ta hänsyn till och lära oss av oss alla.

      Jag visste inte att det fanns ett grafiskt gränssnitt för rsync.

  6.   senaste nybörjaren sade

    Wow, jag tycker att koden är väldigt intressant, mycket användbar. Fortsätt så. 😀
    Jag behåller det om jag behöver det.

    Hälsningar.

    1.    Joaquin sade

      Tack!.