Script bash: kopier nye billeder fra SD til pc

Nogle gange er vi nødt til at udføre gentagne opgaver på vores pc, som over tid bliver kedelige. I visse tilfælde kan vi lette vores arbejde ved at bruge scripts, der fungerer for os.

I dag skriver jeg for at vise dig et bash-script, der løste et behov: Kopier nye billeder fra mit digitale kamera fra et SD-kort til pc'en.

Situation:

Hver gang jeg havde nye billeder til download til min computer, ville jeg gøre følgende:

1. Åbn det bibliotek, hvor jeg har billederne klassificeret i underkataloger.

2. Opret en ny underkatalog med navnet på den aktuelle dato i formatet yy.mm.dd

3. Gå til den underkatalog, der blev oprettet forrige gang, og se, hvad der er det sidst gemte billede.

4. Kopier de nye billeder fra SD-kortet til det nyoprettede bibliotek.

Dette tager ikke mere end et minut, men det er lettere for processen at udføre ved bare at indsætte kortet.

Jeg er nødt til at bruge kortet, fordi jeg ikke direkte kan overføre billederne fra kameraet via USB, da der ikke er nogen Linux-drivere (som altid sker ...)

Opløsning:

Opret et bash-script, der gør følgende:

1. Kontroller ved opstart, om SD-kortet er monteret. Ellers slutter det.

2. Gå til hovedmappen med billeder, og find den sidste. Gem dit navn i en variabel.

3. Sammenlign den aktuelle dato med den sidste mappe, hvis de adskiller sig, skal du oprette en ny mappe med navnet på den aktuelle dato i formatet "åå.mm.dd".

4. Gå til den sidste mappe (ikke den nye, men en ældre), og gem i navnet på den sidste fil, der blev overført sidste gang, i en variabel.

I dette trin er det nødvendigt at filtrere navnet på filen for at kunne sammenligne den med de nye filer på kortet i den nærmeste fremtid. Filerne har følgende format: xxx_xxxx.eee Hvor: x = ciffer 0 til 9 og eee = udvidelse (JPG, MOV). For eksempel: 100_5684.JPG, 100_5699.MOV. Efter filteret forbliver navnet xxxxxxx Derfor har vi i eksemplet ovenfor: 1005684, 1005699.

Da biblioteket kan indeholde andre typer filer eller med ændrede navne, bruges filteret.

5. Gå til kortet og filtrer filerne som i det foregående punkt.

6. Sammenlign filerne på kortet med variablen, der indeholder den sidste fil, der blev overført forrige gang (punkt 4), og kopier de navngivne filer til det nyoprettede bibliotek større end variablen. (da navne kun er tal).

7. Åbn kataloget, der indeholder de nye billeder, med filhåndteringen.

Nedenfor viser jeg dig scriptet med kommentarer, der forklarer, hvordan det fungerer. Jeg præciserer, at jeg ikke er programmør, og det gav mig flere hovedpine, indtil jeg fik det til at fungere, især når jeg skulle filtrere navnene til "for" -sløjfen.

#! / bin / bash ### --- VERIFIER HVIS SD MONTERES --- ### SD = / media / KODAK / DCIM / 100Z8612 hvis [[-d $ SD]]; derefter ### --- CREATE DIRECTORY --- ### #Læs bibliotek med billeder, og opret en anden med navnet på den aktuelle # dato og tilladelser 755, hvis den ikke findes. cd ~ / Billeder / kodak ULTDIR = `ls -1 | hale -n1` # sidste mappe på listen. DATE = `date +% y.% M.% D` # Aktuel dato i YY.MM.DD-format, hvis [" $ LASTDIR "! =" $ DATE "]; derefter mkdir -vm 755`dato +% y.% m.% d` # opret mappe med aktuel dato fi ### --- SE SIDSTE FIL AF $ 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 | klip -c1-3,5-8` # se det sidste billede med navnet xxx_XXXX.eee .eee = filtypenavn (JPG eller MOV) # For at sikre, at scriptet fungerer, når det er opfyldt: # 100_9999.eee - > 101_0000.eee og der er ingen fejl # SKÆR, så den er i xxxXXXX-format ### --- FLYT TIL LISTENS SIDSTE DIREKTOR --- ### # ELLER DEN NYVENSTE OPRETTET, HVIS # cd blev OPRETTET .. ULTDIR = `ls -1 | hale -n1` # går igen, fordi det ellers tager den forrige ULTDIR af if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER filerne i SD --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - SAMMENLIG NYE FILER MED NAVN STØRRE END SIDST --- ### for I i $ FILTER gør N = `echo $ I | klip -c1-3,5-8` # Skær navn, hvis [["$ ULTIMG" -lt "$ N"]]; derefter cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Åbn den nye mappe med Thunar ellers exit 0 fi exit 0

Endelig for at få det til at fungere tilføjede jeg det til Xfce's "Removable Drives and Media" -applikation i menuen

Indstillinger → Xfce 4 Indstillingsstyring → Flytbare drev og medier → Kameraer

ved hjælp af indstillingen importbillede. Når jeg indsætter kortet, spørger en dialogboks, om jeg vil importere billederne. Efter accept accepteres scriptet.

Nå det er det. Undskyld for tekstens rod, det er mit første indlæg, og jeg ved ikke, hvordan man skal oprette scriptet, når jeg redigerer det. Jeg håber, det er nyttigt for nogen i det mindste at have en idé og tilpasse den til hvert enkelt tilfælde.

Jeg licenserede ikke, fordi jeg ikke har informeret mig godt om hver version af GPL, men de har frihed til at kopiere og ændre den. Og du er velkommen til at sige, hvordan det kunne forbedres, eller hvis der er andre måder at gøre det samme, men lettere.

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Percaff_TI99 sagde han

    Meget interessant Joaquín, en god ide er at uploade scriptet i pastaen, hvor det er lettere at dele koden, og som du siger, kan det tilpasses til andre behov, og man lærer at bruge bash lidt mere.

    Greetings!

    1.    Joaquin sagde han

      Udført, tilføjet i http://paste.desdelinux.net/4737
      Tak!

  2.   vr_rv sagde han

    Når du kopierer et fotografi, der allerede findes i biblioteket, angiver det ikke, at der allerede er et, og giver dig mulighed for at udskifte det eller ikke kopiere det?

    Alligevel er det meget nyttigt, da det gør alt automatisk

    1.    Joaquin sagde han

      Hej. Det kopierer faktisk ikke gentagne billeder, det ignorerer dem bare. Ideen var netop at kopiere de nye filer uden brug af brugerinteraktion. Medmindre du tilføjer billeder mere end en gang om dagen, kopierer scriptet også de nye filer til en ny mappe. Jeg forklarer kort:

      I dag er 10/03/13, jeg opretter en mappe kaldet 13.03.10/100/4440 og kopierer nogle billeder eller video (MOV) inde: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (De manglende 4443 og 4444 blev slettet med kameraet, den sidste er 4445).

      Antag derefter, at jeg bruger scriptet den 01/04/13 og har nye billeder på kortet. Scriptet opretter en mappe kaldet 13.04.01 og inde i de nye billeder / videoer, hvis navn er større end "4445"; fordi det læser biblioteket 13.03.10 og det sidste billede er 100_4445.JPG. Hvis jeg kører scriptet igen med nye kortbilleder samme dag, føjes de til 13.04.01-biblioteket. Ingen overskrives.

      Jeg håber, jeg har afklaret min idé lidt 🙂

  3.   Manuti sagde han

    Og du kender ikke Rapid Photo Downloader? Jeg tror, ​​det gør alt dette og mere.

    1.    Hr. Sort sagde han

      Pointen er, at den tynde mand gjorde det selv, han ville have haft det sjovt antager jeg, og det kan tjene en anden

    2.    Joaquin sagde han

      Hej. Jeg vidste det ikke, og det ser godt ud fra det, jeg så på internettet, men i virkeligheden opfylder manuskriptet perfekt det, jeg har brug for; hvilket er at indsætte kortet og få alle filerne kopieret automatisk.

      Det hjalp mig også med at lære lidt mere, fordi det naturligvis ikke fungerede første gang; Der opstod fejl og meget læres af dem.

      Jeg havde ikke til hensigt at vise scriptet for at løse problemer for andre, der er applikationer som dem, du nævner, som er mere generelle. Jeg delte det for dig at læse og som en reference til at oprette nye ting ved hjælp af sløjfer (i dette tilfælde "for") og regulære udtryk (variabler "ULTIMG" og "FILTER" i scriptet)

  4.   kodelab sagde han

    Det virker nyttigt, jeg opbevarer det, hvis jeg har brug for det en dag. Tak skal du have.

    1.    Joaquin sagde han

      Tak!

  5.   ikke navngivet sagde han

    men for det har vi allerede grsync

    1.    Joaquin sagde han

      Ja, men jeg tror, ​​rsync bruges mere til sikkerhedskopier. Jeg har aldrig set på det, men det er en applikation, som vi skal tage i betragtning og lære af os alle.

      Jeg vidste ikke, at der var en grafisk grænseflade til rsync.

  6.   sidste nybegynder sagde han

    Wow, jeg finder koden meget interessant, meget nyttig. Bliv ved. 😀
    Jeg holder det, hvis jeg har brug for det.

    Greetings.

    1.    Joaquin sagde han

      Tak skal du have!.