Soms moet ons herhalende take op ons rekenaar uitvoer, wat mettertyd vervelig raak. In sekere gevalle kan ons ons werk vergemaklik deur skrifte te gebruik wat vir ons werk.
Vandag skryf ek om u 'n bash-script te wys wat die behoefte opgelos het: kopieer nuwe beelde van my digitale kamera vanaf 'n SD-kaart na die rekenaar.
situasie:
Elke keer as ek nuwe beelde op my rekenaar aflaai, het ek die volgende gedoen:
1. Maak die gids oop waar ek die prente in subgidse het.
2. Skep 'n nuwe subgids met die naam van die huidige datum, in yy.mm.dd-formaat
3. Gaan na die subgids wat die vorige keer geskep is en kyk wat is die laaste afbeelding wat gestoor is.
4. Kopieer die nuwe beelde van die SD-kaart na die nuutgeskepte gids.
Dit duur nie meer as 'n minuut nie, maar dit is makliker om die proses te doen deur net die kaart in te sit.
oplossing:
Skep 'n bash-script wat die volgende doen:
1. Verifieer by die opstart of die SD-kaart gemonteer is. Andersins eindig dit.
2. Gaan na die hoofgids van beelde en vind die laaste een. Stoor u naam in 'n veranderlike.
3. Vergelyk die huidige datum met die laaste gids, indien dit verskil, skep 'n nuwe gids met die naam van die huidige datum in die formaat "yy.mm.dd".
4. Gaan na die laaste gids (nie die nuwe nie, maar 'n ouer) en stoor die naam van die laaste lêer wat die vorige keer oorgedra is in 'n veranderlike.
In hierdie stap is dit nodig om die naam van die lêer te filter om dit in die nabye toekoms met die nuwe lêers op die kaart te kan vergelyk. Die lêers het die volgende formaat: xxx_xxxx.eee Waar: x = syfer 0 tot 9 en eee = uitbreiding (JPG, MOV). Byvoorbeeld: 100_5684.JPG, 100_5699.MOV. Na die filter bly die naam xxxxxxx Daarom sou ons in die voorbeeld hierbo hê: 1005684, 1005699.
Aangesien die gids ander soorte lêers of met veranderde name kan bevat, word die filter gebruik.
5. Gaan na die kaart en filter die lêers soos in die vorige punt.
6. Vergelyk die lêers op die kaart met die veranderlike wat die vorige keer die vorige lêer oorgedra het (punt 4) en kopieer die genoemde lêers na die nuutgeskepte gids groter as die veranderlike. (aangesien name net getalle is).
7. Open die gids met die nuwe beelde met die lêerbestuurder.
Vervolgens wys ek u die teks met kommentaar wat verduidelik hoe dit werk. Ek verduidelik dat ek nie 'n programmeerder is nie, en dit het my verskeie hoofpyne gegee totdat ek dit aan die werk gekry het, veral toe ek die name vir die "for" -lus moes filter.
#! / bin / bash ### --- VERIFISEER AS SD GEMONTEER IS --- ### SD = / media / KODAK / DCIM / 100Z8612 as [[-d $ SD]]; dan ### --- CREATE DIRECTORY --- ### # Lees die gids met beelde en skep 'n ander met die naam van die # huidige datum en toestemmings 755 as dit nie bestaan nie. cd ~ / Foto's / kodak ULTDIR = `ls -1 | stert -n1` # laaste gids in die lys. DATE = `date +% y.% M.% D` # Huidige datum in YY.MM.DD-formaat as [" $ LASTDIR "! =" $ DATE "]; dan mkdir -vm 755`datum +% y.% m.% d` # skep gids met huidige datum fi ### --- SIEN LAASTE BESTAND VAN $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | stert -n1 | sny -c1-3,5-8 '# sien die laaste afbeelding met die naam xxx_XXXX.eee .eee = lêeruitbreiding (JPG of MOV) # Om te verseker dat die script werk nadat dit vervul is: # 100_9999.eee - > 101_0000.eee en daar is geen foute nie # SNY sodat dit in die formaat xxxXXXX ### --- VERPLAAT NA DIE LAASTE REGISTER VAN DIE LYS --- ### # OF DIE ONLANGSE GESKEP, AS # cd GESKEP is .. LAASTE = `ls -1 | stert -n1 `# gaan weer, want anders neem die vorige ULTDIR van die if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER die lêers in SD --- ### FILTER =` ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - VERGELYK NUWE BESTANDE MET NAAM GROTER AS LAAST --- ### vir I in $ FILTER doen N = `echo $ I | sny -c1-3,5-8` # Sny naam as [["$ ULTIMG" -lt "$ N"]]; dan cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Open die nuwe gids met Thunar anders afrit 0 fi exit 0
Uiteindelik om dit te laat werk, het ek dit by die Xfce se "Removable Drives and Media" -toepassing in die menu gevoeg
Instellings → Xfce 4 Instellingsbestuurder → Verwyderbare skywe en media → kameras
gebruik die invoerprent-opsie. As ek die kaart inbring, word 'n dialoogkassie gevra of ek die beelde wil invoer. By aanvaarding word die script uitgevoer.
Wel, dit is dit. Jammer vir die gemors van die teks, dit is my eerste boodskap en ek weet nie hoe om die skrif te tabuleer as ek dit redigeer nie. Ek hoop dat dit vir iemand nuttig is om ten minste 'n idee te hê en aan te pas by elke geval.
13 kommentaar, los joune
Baie interessant Joaquín, 'n goeie idee is om die script in die pasta op te laai waar dit makliker is om die kode te deel, en soos u sê, dit kan aangepas word by ander behoeftes en mens leer bash 'n bietjie meer gebruik.
Groete!
Klaar, bygevoeg in http://paste.desdelinux.net/4737
Dankie!
Wanneer u 'n foto kopieer wat reeds in die gids is, dui dit nie aan dat daar al een is nie en gee u die opsie om dit te vervang of nie te kopieër nie?
Dit is in elk geval baie handig, aangesien dit alles outomaties doen
Hi. Dit kopieer nie herhaalde beelde nie, dit ignoreer dit net. Die idee was juis om die nuwe lêers te kopieer sonder dat gebruikers interaksie nodig gehad het. Tensy u meer as een keer per dag beelde byvoeg, kopieer die script die nuwe lêers na 'n nuwe gids. Ek verduidelik kortliks:
Vandag is 10/03/13, ek skep 'n gids genaamd 13.03.10/100/4440 en kopieer 'n paar beelde of video's (MOV) binne: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
(Die ontbrekende 4443 en 4444 is met die kamera uitgevee, die laaste een is 4445).
Veronderstel ek gebruik die teks op 01/04/13 en het nuwe beelde op die kaart. Die script skep 'n gids met die naam 13.04.01 en binne die nuwe beelde / video's waarvan die naam groter is as "4445"; omdat dit die gids 13.03.10 lees en die laaste prent 100_4445.JPG is. As ek dieselfde dag die script met nuwe beelde van die kaart herlaai, word dit bygevoeg in die 13.04.01-gids. Geen een word oorskryf nie.
Ek hoop dat ek my idee 'n bietjie opgeklaar het 🙂
En jy ken nie Rapid Photo Downloader nie? Ek dink dit doen alles en nog meer.
Die punt is dat die maer man dit self gedoen het, sou ek dink, en dit kan iemand anders dien
Hi. Ek het dit nie geweet nie en dit lyk goed uit wat ek op die internet gesien het, maar die teks voldoen eintlik aan wat ek nodig het; om die kaart in te sit en al die lêers outomaties te laat kopieër.
Dit het my ook gehelp om 'n bietjie meer te leer, want dit het natuurlik nie die eerste keer gewerk nie; Foute het voorgekom en baie word daaruit geleer.
Ek het nie gedink om die skrif te wys om die probleme aan ander op te los nie; daar is toepassings soos die wat u noem, meer algemeen. Ek het dit vir u gedeel om te lees en as verwysing om nuwe dinge te skep met behulp van lusse (in hierdie geval "vir") en gereelde uitdrukkings (veranderlikes "ULTIMG" en "FILTER" in die skrif)
Dit lyk nuttig, ek hou dit vir ingeval ek dit eendag nodig het. Dankie.
Dankie!
maar daarvoor het ons reeds grsync
Ja, maar ek dink dat rsync meer gebruik word vir rugsteun. Ek het nog nooit daarna gekyk nie, maar dit is 'n toepassing waarmee ons almal in ag moet neem.
Ek het nie geweet daar is 'n grafiese koppelvlak vir rsync nie.
Sjoe, ek vind die kode baie interessant, baie nuttig. hou so aan. 😀
Ek sal dit bewaar as ek dit nodig het.
Groete.
Dankie!.