Script Bash: copia nuove immagini da SD a PC

A volte abbiamo bisogno di eseguire attività ripetitive sul nostro PC, che nel tempo diventano noiose. In alcuni casi possiamo facilitare il nostro lavoro facendo uso di script che funzionano per noi.

Oggi ti scrivo per mostrarti uno script bash che ha risolto un'esigenza: copiare nuove immagini dalla mia fotocamera digitale da una scheda SD al PC.

Località:

Ogni volta che avevo nuove immagini da scaricare sul mio computer, avrei fatto quanto segue:

1. Apri la directory in cui ho le immagini classificate in sottodirectory.

2. Creare una nuova sottodirectory con il nome della data corrente, nel formato aa.mm.dd

3. Spostarsi nella sottodirectory creata la volta precedente e vedere qual è l'ultima immagine salvata.

4. Copiare le nuove immagini dalla scheda SD nella directory appena creata.

Questo non richiede più di un minuto, ma è più facile che il processo venga eseguito semplicemente inserendo la scheda.

Devo usare la scheda perché non posso trasferire direttamente le immagini dalla fotocamera tramite USB, non essendoci driver Linux (come sempre accade ...)

soluzione:

Crea uno script bash che faccia quanto segue:

1. Verificare all'avvio se la scheda SD è montata. Altrimenti finisce.

2. Vai alla directory principale delle immagini e trova l'ultima. Salva il tuo nome in una variabile.

3. Confronta la data corrente con l'ultima directory, se differiscono, crea una nuova directory con il nome della data corrente nel formato "aa.mm.dd".

4. Spostarsi nell'ultima directory (non quella nuova, ma una più vecchia) e salvare il nome dell'ultimo file trasferito la volta precedente in una variabile.

In questo passaggio è necessario filtrare il nome del file per poterlo confrontare con i nuovi file sulla scheda in un prossimo futuro. I file hanno il seguente formato: xxx_xxxx.eee Dove: x = cifra da 0 a 9 ed eee = estensione (JPG, MOV). Ad esempio: 100_5684.JPG, 100_5699.MOV. Dopo il filtro, il nome rimane xxxxxxx Pertanto, nell'esempio sopra, avremmo: 1005684, 1005699.

Poiché la directory può contenere altri tipi di file o con nomi modificati, viene utilizzato il filtro.

5. Spostarsi sulla scheda e filtrare i file come al punto precedente.

6. Confronta i file sulla scheda con la variabile che contiene l'ultimo file trasferito la volta precedente (punto 4) e copia i file nominati nella directory appena creata maggiore della variabile. (poiché i nomi sono solo numeri).

7. Aprire la directory contenente le nuove immagini con il file manager.

Successivamente vi mostro lo script con i commenti che spiegano come funziona. Chiarisco che non sono un programmatore e mi ha dato diversi grattacapi fino a quando non l'ho fatto funzionare, soprattutto quando ho dovuto filtrare i nomi per il ciclo "for".

#! / bin / bash ### --- VERIFICARE SE LA SD È MONTATA --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; quindi ### --- CREATE DIRECTORY --- ### #Leggi la directory delle immagini e creane un'altra con il nome della #data corrente e le autorizzazioni 755 se non esiste. cd ~ / Immagini / kodak ULTDIR = `ls -1 | tail -n1` # ultima directory della lista. DATE = `date +% y.% M.% D` #Data corrente nel formato AA.MM.GG se [" $ LASTDIR "! =" $ DATE "]; quindi mkdir -vm 755`date +% y.% m.% d` # crea una directory con la data corrente fi ### --- VEDERE L'ULTIMO FILE DI $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | tail -n1 | cut -c1-3,5-8` # vedi l'ultima immagine con il nome xxx_XXXX.eee .eee = estensione del file (JPG o MOV) #Per assicurarsi che lo script funzioni dopo che è stato eseguito: # 100_9999.eee -> 101_0000.eee e non ci sono errori # CUT in modo che sia nel formato xxxXXXX ### --- PASSA ALL'ULTIMA DIRECTORY DELLA LISTA --- ### # O ALLA CREAZIONE DI RECENTE, SE # cd è stato CREATO .. ​​ULTDIR = `ls -1 | tail -n1` # va di nuovo perché altrimenti prende il precedente ULTDIR di if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTRA i file in SD --- ### FILTER = `ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - CONFRONTA I NUOVI FILE CON NOME MAGGIORE DELL'ULTIMO --- ### for I in $ FILTER do N = `echo $ I | cut -c1-3,5-8` #Cut nome if [["$ ULTIMG" -lt "$ N"]]; quindi cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Apri la nuova directory con Thunar altrimenti exit 0 fi exit 0

Infine, per farlo funzionare, l'ho aggiunto all'applicazione "Removable Drives and Media" di Xfce nel menu

Impostazioni → Gestione impostazioni di Xfce 4 → Unità e supporti rimovibili → Fotocamere

utilizzando l'opzione di importazione dell'immagine. Quando inserisco la scheda, una finestra di dialogo chiede se voglio importare le immagini. All'accettazione, lo script viene eseguito.

Bene, questo è tutto. Ci scusiamo per la confusione del testo, è il mio primo post e non so come tabulare lo script durante la modifica. Spero che sia utile almeno per qualcuno avere un'idea e adattarla a ogni caso particolare.

Non ho ottenuto la licenza perché non mi sono informato bene su ogni versione della GPL, ma sono libero di copiarla e modificarla. E sentiti libero di dire come potrebbe essere migliorato o se ci sono altri modi per fare lo stesso, ma più facili.

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Percaffè_TI99 suddetto

    Molto interessante Joaquín, una buona idea è caricare lo script in pasta dove è più facile condividere il codice, e come dici tu può essere adattato ad altre esigenze e si impara a usare bash un po 'di più.

    Saluti!

    1.    Joaquin suddetto

      Fatto, aggiunto http://paste.desdelinux.net/4737
      Grazie!

  2.   vr_rv suddetto

    Quando copi una fotografia che è già nella directory, non indica che ce n'è già una e ti dà la possibilità di sostituirla o non copiarla?

    Comunque è molto utile, dato che fa tutto automaticamente

    1.    Joaquin suddetto

      Ciao. In realtà non copia le immagini ripetute, le ignora. L'idea era proprio quella di copiare i nuovi file senza la necessità dell'interazione dell'utente. Inoltre, a meno che non si aggiungano immagini più di una volta al giorno, lo script copia i nuovi file in una nuova directory. Spiego brevemente:

      Oggi è il 10/03/13, creo una directory chiamata 13.03.10/100/4440 e copio alcune immagini o video (MOV) all'interno: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (i 4443 e 4444 mancanti sono stati cancellati con la fotocamera, l'ultimo è 4445).

      Quindi supponiamo che io usi lo script il 01/04/13 e abbia nuove immagini sulla scheda. Lo script crea una directory chiamata 13.04.01 e all'interno delle nuove immagini / video il cui nome è maggiore di "4445"; perché legge la directory 13.03.10 e l'ultima immagine è 100_4445.JPG. Se rieseguo lo script con le nuove immagini dei biglietti lo stesso giorno, vengono aggiunti alla directory 13.04.01. Nessuno viene sovrascritto.

      Spero di aver chiarito un po 'la mia idea 🙂

  3.   Manuti suddetto

    E non conosci Rapid Photo Downloader? Penso che faccia tutto questo e altro ancora.

    1.    Mr Black suddetto

      Il punto è che l'uomo magro l'ha fatto da solo, si sarebbe divertito immagino e potrebbe servire a qualcun altro

    2.    Joaquin suddetto

      Ciao. Non lo sapevo e sembra buono da quello che ho visto su internet, ma in realtà la sceneggiatura soddisfa perfettamente ciò di cui ho bisogno; ovvero inserire la scheda e fare in modo che tutti i file vengano copiati automaticamente.

      Mi ha anche aiutato a imparare un po 'di più perché ovviamente non ha funzionato la prima volta; Si sono verificati degli errori e da essi si impara molto.

      Non avevo intenzione di mostrare lo script per risolvere problemi ad altri, ci sono applicazioni come quelle che dici che sono più generali. L'ho condiviso per farti leggere e come riferimento per creare nuove cose usando i loop (in questo caso "for") ed espressioni regolari (variabili "ULTIMG" e "FILTER" nello script)

  4.   codelab suddetto

    Mi sembra utile, lo tengo in caso ne avessi bisogno un giorno. Grazie.

    1.    Joaquin suddetto

      Grazie!

  5.   senza nome suddetto

    ma per questo abbiamo già grsync

    1.    Joaquin suddetto

      Sì, ma penso che rsync sia utilizzato di più per i backup. Non l'ho mai visto ma è un'applicazione che dovremmo tenere in considerazione e imparare da tutti.

      Non sapevo ci fosse un'interfaccia grafica per rsync.

  6.   ultimo novellino suddetto

    Wow, trovo il codice molto interessante, molto utile. continuate così. 😀
    Lo terrò nel caso ne avessi bisogno.

    Saluti.

    1.    Joaquin suddetto

      Grazie!.