Script bash: új képek másolása SD-ről PC-re

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.

Azért kell használnom a kártyát, mert a képeket nem tudom közvetlenül a kameráról USB-n keresztül továbbítani, mivel nincsenek illesztőprogramok a Linux számára (mint mindig történik ...)

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.

Nem adtam licencet, mert nem tájékoztattam magam jól a GPL egyes verzióiról, de szabadon másolhatják és módosíthatják azokat. És ne habozzon megmondani, hogyan lehetne javítani rajta, vagy ha vannak más, de könnyebb módszerek.

13 hozzászólás, hagyd a tiedet

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Percaff_TI99 dijo

    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!

    1.    Joaquin dijo

      Kész, hozzáadva http://paste.desdelinux.net/4737
      Köszönöm!

  2.   vr_rv dijo

    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

    1.    Joaquin dijo

      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 🙂

  3.   Manuti dijo

    És nem ismeri a Rapid Photo Downloader programot? Azt hiszem, mindezt meg még többet is megteszi.

    1.    Mr. Black dijo

      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

    2.    Joaquin dijo

      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).

  4.   kódlabor dijo

    Hasznosnak tűnik, megtartom, ha egyszer szükségem lenne rá. Köszönöm.

    1.    Joaquin dijo

      Köszönöm!

  5.   névtelen dijo

    de ehhez már van grsyncünk

    1.    Joaquin dijo

      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.

  6.   utolsó újonc dijo

    Hú, nagyon érdekesnek és hasznosnak találom a kódot. csak így tovább. 😀
    Megtartom, hátha szükségem lesz rá.

    Üdvözlet.

    1.    Joaquin dijo

      Köszönöm!.