Néha ismétlődő feladatokat kell végrehajtanunk a számítógépünkön, amelyek idővel unalmassá válnak. Bizonyos esetekben megkönnyíthetjük munkánkat a számunkra megfelelő szkriptek használatával.
Ma azért írok, hogy bemutassak egy bash szkriptet, amely megoldotta az igényt: másoljon új képeket digitális fényképezőgépemből SD-kártyáról a PC-re.
helyzet:
Valahányszor új képeket töltöttem le a számítógépemre, a következőket tettem:
1. Nyissa meg azt a könyvtárat, ahol az alkönyvtárakba sorolt képek vannak.
2. Hozzon létre egy új alkönyvtárat az aktuális dátum nevével, yy.mm.dd formátumban
3. Lépjen az előző alkalommal létrehozott alkönyvtárba, és nézze meg, mi az utolsó mentett kép.
4. Másolja az új képeket az SD-kártyáról az újonnan létrehozott könyvtárba.
Ez nem tart tovább egy percnél, de a folyamat egyszerűbb elvégzése a kártya behelyezésével.
Megoldás:
Hozzon létre egy bash szkriptet, amely a következőket hajtja végre:
1. Indításkor ellenőrizze, hogy be van-e helyezve az SD-kártya. Egyébként vége.
2. Lépjen a képek fő könyvtárába, és keresse meg az utolsót. Mentsd el a nevedet egy változóba.
3. Hasonlítsa össze az aktuális dátumot az utolsó könyvtárral, ha különböznek egymástól, hozzon létre egy új könyvtárat az aktuális dátum nevével "yy.mm.dd" formátumban.
4. Lépjen az utolsó könyvtárba (ne az új, hanem a régebbi könyvtárba), és mentse el egy változóba az előző alkalommal utoljára átadott fájl nevét.
Ebben a lépésben szűrni kell a fájl nevét, hogy a közeljövőben összehasonlítani lehessen a kártyán található új fájlokkal. A fájlok formátuma a következő: xxx_xxxx.eee Ahol: x = 0 és 9 közötti szám és eee = kiterjesztés (JPG, MOV). Például: 100_5684.JPG, 100_5699.MOV. A szűrő után a név xxxxxxx marad Ezért a fenti példában a következőket tennénk: 1005684, 1005699.
Mivel a könyvtár más típusú fájlokat vagy megváltozott neveket tartalmazhat, a szűrőt használják.
5. Lépjen a kártyára és szűrje le a fájlokat az előző pont szerint.
6. Hasonlítsa össze a kártya fájljait azzal a változóval, amely tartalmazza az előző alkalommal utoljára átadott fájlt (4. pont), és másolja a megnevezett fájlokat az újonnan létrehozott könyvtárba nagyobb, mint a változó. (mivel a nevek csak számok).
7. Nyissa meg az új képeket tartalmazó könyvtárat a fájlkezelővel.
Ezután bemutatom a szkriptet megjegyzésekkel, amelyek elmagyarázzák a működését. Tisztázom, hogy nem vagyok programozó, és ez több fejfájást okozott mindaddig, amíg rá nem jöttem a munkára, különösen, amikor a "for" hurok nevét kellett szűrnem.
#! / bin / bash ### --- ELLENŐRIZNI, HOGY AZ SD-T SZERELTÜK --- ### SD = / media / KODAK / DCIM / 100Z8612, ha [[-d $ SD]]; akkor ### --- CREATE DIRECTORY --- ### # Olvassa el a képek könyvtárát, és hozzon létre egy másikat a # jelenlegi dátum és engedélyek 755 nevével, ha nem létezik. cd ~ / Képek / kodak ULTDIR = `ls -1 | tail -n1` # utolsó könyvtár a listában. DATE = `dátum +% y.% M.% D` #A jelenlegi dátum ÉÉ.HH.NN formátumban, ha [" $ LASTDIR "! =" $ DÁTUM "]; akkor mkdir -vm 755`dátum +% y.% m.% d` # könyvtár létrehozása az aktuális dátummal fi ### --- LÁSD UTOLSÓ $ ULTDIR FÁJLAT --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | farok -n1 | kivágás -c1-3,5-8 "# lásd az utolsó xxx_XXXX.eee nevű képet .eee = fájlkiterjesztés (JPG vagy MOV) # Annak biztosítása érdekében, hogy a szkript teljesülése után is működjön: # 100_9999.eee - > 101_0000.eee és nincsenek hibák # CUT úgy, hogy xxxXXXX formátumban legyenek ### --- Lépjünk a Lista utolsó könyvtárába --- ### # VAGY A LEGJOBBBAN LÉTREHOZOTTAK, HA # cd-T LÉTREHOZNAK .. ULTDIR = `ls -1 | a tail -n1` # ismét megy, mert különben az if cd / media / KODAK / DCIM / 100Z8612 ### --- SZŰRŐ fájlok SD-re --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] "### - - HASZNÁLJA AZ ÚJ FÁJLOKAT A NEVELI NÉLKÜLI NEVEL --- ### névvel, mert én a $ FILTER-ben csinálom N = `visszhang $ I | cut -c1-3,5-8` #Cut name, ha [["$ ULTIMG" -lt "$ N"]]; majd cp $ I ~ / Pictures / kodak / $ ULTDIR fi thunar ~ / Pictures / kodak / $ ULTDIR #Az új könyvtár megnyitása Thunar else exit 0 fi exit 0-val
Végül, hogy működjön, hozzáadtam az Xfce menü „Removable Drives and Media” alkalmazásához
Beállítások → Xfce 4 Beállítások kezelő → Cserélhető meghajtók és adathordozók → Kamerák
a kép importálása opcióval. Amikor behelyezem a kártyát, egy párbeszédpanel megkérdezi, hogy importálni akarom-e a képeket. Az elfogadáskor a szkript végrehajtásra kerül.
Hát ennyi. Elnézést a szöveg rendetlenségéért, ez az első hozzászólásom, és nem tudom, hogyan kell táblázatot készíteni a szkript szerkesztésekor. Remélem, hogy valakinek hasznos legalább ötlete és alkalmazkodnia az egyes esetekhez.
Nagyon érdekes Joaquín, jó ötlet, ha feltöltöd a szkriptet a pasztába, ahol könnyebb megosztani a kódot, és ahogy mondod, más igényekhez igazítható, és az ember még egy kicsit megtanulja használni a bash-t.
Üdvözlet!
Kész, hozzáadva http://paste.desdelinux.net/4737
Köszönöm!
A könyvtárban már található fénykép másolásakor nem jelzi, hogy van már ilyen, és lehetőséget ad arra, hogy kicserélje vagy ne másolja?
Egyébként nagyon hasznos, mivel mindent automatikusan elvégez
Szia. Valójában nem másolja az ismétlődő képeket, csak figyelmen kívül hagyja azokat. Az ötlet pontosan az volt, hogy az új fájlokat a felhasználó interakciója nélkül másolja le. Továbbá, hacsak naponta nem egyszer ad hozzá képeket, a szkript az új fájlokat egy új könyvtárba másolja. Röviden elmagyarázom:
Ma 10. Létrehozok egy 03/13/13.03.10 nevű könyvtárat, és bemásolok néhány képet vagy videót (MOV): 100_4440.JPG, 100_4441.JPG, 100_4442.MOV, 100_4445.JPG
(A hiányzó 4443-as és 4444-es törlődött a kamerával, az utolsó 4445).
Akkor tegyük fel, hogy a szkriptet használtam 01-én, és új képek vannak a kártyán. A szkript létrehoz egy 04 nevű könyvtárat és az új képek / videók belsejében, amelyek neve nagyobb, mint "13"; mert elolvassa a 13.04.01 könyvtárat, az utolsó kép pedig 4445_13.03.10.JPG. Ha ugyanazon a napon újfuttatom a szkriptet új képekkel a kártyáról, akkor felkerülnek a 100 könyvtárba. Egyiket sem írják felül.
Remélem, tisztáztam egy kicsit az elképzelésemet 🙂
És nem ismeri a Rapid Photo Downloader programot? Azt hiszem, mindezt meg még többet is megteszi.
A lényeg az, hogy a sovány férfi maga csinálta, jól érezte magát, gondolom, és ez másnak is szolgálhat
Szia. Nem tudtam, és jól tűnik az interneten látottak alapján, de a forgatókönyv valójában tökéletesen teljesíti azt, amire szükségem van; ami a kártya behelyezése és az összes fájl automatikus másolása.
Ez segített abban is, hogy még egy kicsit többet tanuljak, mert nyilvánvalóan nem először működött; Hibák történtek, és sokat tanulnak tőlük.
Nem akartam megmutatni a szkriptet mások problémáinak megoldására, vannak olyan alkalmazások, amelyeket Ön említ, amelyek általánosabbak. Megosztottam neked, hogy elolvashassa, és referenciaként új dolgokat hozhat létre ciklusok (ebben az esetben "for") és reguláris kifejezések ("ULTIMG" és "FILTER" változók segítségével a szkriptben).
Hasznosnak tűnik, megtartom, ha egyszer szükségem lenne rá. Köszönöm.
Köszönöm!
de ehhez már van grsyncünk
Igen, de szerintem az rsync-et inkább biztonsági másolatokra használják. Soha nem néztem rá, de ez egy olyan alkalmazás, amelyet figyelembe kell vennünk és mindenkitől meg kell tanulnunk.
Nem tudtam, hogy van grafikus felület az rsync számára.
Hú, nagyon érdekesnek és hasznosnak találom a kódot. csak így tovább. 😀
Megtartom, hátha szükségem lesz rá.
Üdvözlet.
Köszönöm!.