Script Bash: copiați imagini noi din SD pe PC

Uneori trebuie să efectuăm sarcini repetitive pe computerul nostru, care în timp devin plictisitoare. În anumite cazuri, ne putem ușura munca folosind scripturi care funcționează pentru noi.

Astăzi vă scriu pentru a vă arăta un script bash care a rezolvat o nevoie: să copiați imagini noi de pe camera digitală de pe un card SD pe computer.

Situatie:

De fiecare dată când aveam imagini noi de descărcat pe computer, făceam următoarele:

1. Deschideți directorul în care am imaginile clasificate în subdirectoare.

2. Creați un subdirector nou cu numele datei curente, în format yy.mm.dd

3. Mutați-vă în subdirectorul creat anterior și vedeți care este ultima imagine salvată.

4. Copiați noile imagini de pe cardul SD în directorul nou creat.

Acest lucru nu durează mai mult de un minut, dar procesul este mai ușor de realizat prin simpla introducere a cardului.

Trebuie să folosesc cardul, deoarece nu pot transfera direct imaginile de pe cameră prin USB, deoarece nu există drivere Linux (așa cum se întâmplă întotdeauna ...)

Soluţie:

Creați un script bash care face următoarele:

1. Verificați la pornire dacă cardul SD este montat. Altfel se termină.

2. Accesați directorul principal de imagini și găsiți-l pe ultimul. Salvați-vă numele într-o variabilă.

3. Comparați data curentă cu ultimul director, dacă diferă, creați un director nou cu numele datei curente în formatul „yy.mm.dd”.

4. Mutați-vă în ultimul director (nu cel nou, ci unul mai vechi) și salvați într-o variabilă numele ultimului fișier transferat data precedentă.

În acest pas este necesar să filtrați numele fișierului pentru a-l putea compara cu noile fișiere de pe card în viitorul apropiat. Fișierele au următorul format: XXX_xxxx.eee Unde: x = cifra 0-9 și eee = extensie (JPG, MOV). De exemplu: 100_5684.JPG, 100_5699.MOV. După filtr, numele rămâne xxxxxxx Prin urmare, în exemplul de mai sus, am avea: 1005684, 1005699.

Deoarece directorul poate conține alte tipuri de fișiere sau cu nume modificate, se folosește filtrul.

5. Mutați-vă pe card și filtrați fișierele ca în punctul anterior.

6. Comparați fișierele de pe card cu variabila care conține ultimul fișier transferat anterior (punctul 4) și copiați fișierele numite în directorul nou creat mai mare decât variabila. (deoarece numele sunt doar numere).

7. Deschideți directorul care conține noile imagini cu managerul de fișiere.

Mai jos vă arăt scenariul cu comentarii care explică cum funcționează. Mă lămuresc că nu sunt programator și mi-a dat mai multe bătăi de cap până am reușit să funcționeze, mai ales când a trebuit să filtrez numele buclei „pentru”.

#! / bin / bash ### --- VERIFICĂ DACĂ SD ESTE MONTAT --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; apoi ### --- CREATE DIRECTORY --- ### #Citiți directorul de imagini și creați altul cu numele # datei curente și permisiunile 755 dacă nu există. cd ~ / Pictures / kodak ULTDIR = `ls -1 | tail -n1` # ultimul director din listă. DATE = `data +% y.% M.% D` #Data curentă în format YY.MM.DD dacă [" $ LASTDIR "! =" $ DATE "]; apoi mkdir -vm 755`date +% y.% m.% d` # creați directorul cu data curentă fi ### --- VEZI ULTIMUL FIȘIER DE $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | coada -n1 | cut -c1-3,5-8` # vezi ultima imagine cu numele xxx_XXXX.eee .eee = extensie de fișier (JPG sau MOV) # Pentru a vă asigura că scriptul funcționează după ce acesta este îndeplinit: # 100_9999.eee - > 101_0000.eee și nu există erori # CUT, astfel încât să fie în format xxxXXXX ### --- MUȚIȚI ÎN ULTIMUL DIRECTOR AL LISTEI --- ### # SAU CREATUL RECENT, DACĂ # CD a fost CREAT .. ULTDIR = `ls -1 | tail -n1` # merge din nou pentru că altfel ia ULTDIR-ul anterior al if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER fișierele în SD --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - COMPARAȚI FIȘIERE NOI CU NUME MAI MARE decât ULTIMUL --- ### pentru I în $ FILTER face N = `echo $ I | cut -c1-3,5-8` #Cut name if [["$ ULTIMG" -lt "$ N"]]; apoi cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Deschide noul director cu Thunar else exit 0 fi exit 0

În cele din urmă, pentru ca acesta să funcționeze, l-am adăugat în aplicația Xfce „Unități amovibile și suporturi media” din meniu

Setări → Manager setări Xfce 4 → Unități și suporturi amovibile → Camere foto

folosind opțiunea de importare a imaginii. Când introduc cardul, o casetă de dialog îmi întreabă dacă vreau să import imagini. La acceptare, scriptul este executat.

Ei bine, asta e. Îmi pare rău pentru dezordinea textului, este prima mea postare și nu știu cum să tabulez scriptul când îl editez. Sper că este util cuiva cel puțin să aibă o idee și să o adapteze la fiecare caz particular.

Nu am acordat licență pentru că nu m-am informat bine despre fiecare versiune a GPL, dar acestea sunt libere să o copieze și să o modifice. Și nu ezitați să spuneți cum ar putea fi îmbunătățit sau dacă există alte modalități de a face același lucru, dar mai ușor.

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Percaff_TI99 el a spus

    Foarte interesant Joaquín, o idee bună este să încărcați scriptul în pastă, unde este mai ușor să partajați codul și, după cum spuneți, poate fi adaptat la alte nevoi și se învață să folosiți bash puțin mai mult.

    Salutări!

    1.    Joaquin el a spus

      Gata, adăugat în http://paste.desdelinux.net/4737
      Vă mulţumim!

  2.   vr_rv el a spus

    Când copiați o fotografie care se află deja în director, aceasta nu indică faptul că există deja una și vă oferă opțiunea de a o înlocui sau de a nu o copia?

    Oricum este foarte util, deoarece face totul automat

    1.    Joaquin el a spus

      Salut. De fapt, nu copiază imagini care se repetă, ci doar le ignoră. Ideea a fost tocmai de a copia noile fișiere fără a fi nevoie de interacțiunea cu utilizatorul. De asemenea, dacă nu adăugați imagini de mai multe ori pe zi, scriptul copiază noile fișiere într-un director nou. Vă explic pe scurt:

      Astăzi este 10/03/13, creez un director numit 13.03.10/100/4440 și copiez câteva imagini sau videoclipuri (MOV) în interiorul: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (4443 și 4444 lipsă au fost șterse cu camera, ultima este 4445).

      Apoi, să presupunem că folosesc scriptul pe 01/04/13 și am imagini noi pe card. Scriptul creează un director numit 13.04.01 și în interiorul noilor imagini / videoclipuri al căror nume este mai mare decât „4445”; deoarece citește directorul 13.03.10 și ultima imagine este 100_4445.JPG. Dacă reluăm scriptul cu imagini noi de pe card în aceeași zi, acestea sunt adăugate în directorul 13.04.01. Niciunul nu este suprascris.

      Sper că mi-am clarificat puțin ideea 🙂

  3.   Manuti el a spus

    Și nu știi Rapid Photo Downloader? Cred că face toate acestea și multe altele.

    1.    Domn negru el a spus

      Ideea este că bărbatul slab a făcut-o el însuși, s-ar fi distrat, cred, și poate servi altcuiva

    2.    Joaquin el a spus

      Salut. Nu am știut-o și mi se pare bine din ceea ce am văzut pe internet, dar de fapt scriptul îndeplinește perfect ceea ce am nevoie; care este să introduceți cardul și să copiați automat toate fișierele.

      De asemenea, m-a ajutat să învăț puțin mai mult pentru că, evident, nu a funcționat prima dată; Au apărut greșeli și se învață multe de la ei.

      Nu intenționam să arăt scenariul pentru rezolvarea problemelor pentru alții, există aplicații precum cele pe care le menționați care sunt mai generale. L-am împărtășit pentru ca dvs. să îl citiți și ca referință pentru a crea lucruri noi folosind bucle (în acest caz „pentru”) și expresii regulate (variabile „ULTIMG” și „FILTER” în script)

  4.   laborator de codificare el a spus

    Pare util, îl păstrez în caz că am nevoie într-o zi. Mulțumesc.

    1.    Joaquin el a spus

      Vă mulţumim!

  5.   anonim el a spus

    dar pentru asta avem deja grsync

    1.    Joaquin el a spus

      Da, dar cred că rsync este folosit mai mult pentru backup-uri. Nu l-am privit niciodată, dar este o aplicație de care ar trebui să ținem cont și să învățăm de la noi toți.

      Nu știam că există o interfață grafică pentru rsync.

  6.   ultimul începător el a spus

    Uau, mi se pare codul foarte interesant, foarte util. ține-o așa. 😀
    O voi păstra în caz că am nevoie de ea.

    Salutări.

    1.    Joaquin el a spus

      Mulțumesc!.