Script Bash: kopírování nových obrázků z SD do PC

Někdy musíme na našem PC provádět opakující se úkoly, které jsou časem zdlouhavé. V určitých případech můžeme svou práci ulehčit využitím skriptů, které fungují pro nás.

Dnes píšu, abych vám ukázal bash skript, který vyřešil potřebu: zkopírujte nové obrázky z mého digitálního fotoaparátu z SD karty do počítače.

Umístění:

Pokaždé, když jsem měl nové obrázky ke stažení do počítače, udělal jsem následující:

1. Otevřete adresář, kde mám obrázky zařazené do podadresářů.

2. Vytvořte nový podadresář s názvem aktuálního data ve formátu rr.mm.dd

3. Přesuňte se do podadresáře vytvořeného v minulosti a podívejte se, jaký je poslední uložený obrázek.

4. Zkopírujte nové obrázky z SD karty do nově vytvořeného adresáře.

To netrvá déle než minutu, ale je jednodušší provést proces vložením karty.

Kartu musím použít, protože nemohu přímo přenášet obrázky z fotoaparátu přes USB, protože neexistují žádné ovladače pro Linux (jako vždy ...)

řešení:

Vytvořte bash skript, který provede následující:

1. Při spuštění ověřte, zda je karta SD připojena. Jinak to končí.

2. Přejděte do hlavního adresáře obrázků a najděte poslední. Uložte své jméno do proměnné.

3. Porovnejte aktuální datum s posledním adresářem, pokud se liší, vytvořte nový adresář s názvem aktuálního data ve formátu „yy.mm.dd“.

4. Přesuňte se do posledního adresáře (ne do nového, ale do staršího) a uložte do proměnné název posledního přeneseného souboru předchozího času.

V tomto kroku je nutné filtrovat název souboru, aby jej bylo možné v blízké budoucnosti porovnat s novými soubory na kartě. Soubory mají následující formát: xxx_xxxx.eee Kde: x = číslice 0 až 9 a eee = přípona (JPG, MOV). Například: 100_5684.JPG, 100_5699.MOV. Po filtru zůstane název xxxxxxx Ve výše uvedeném příkladu bychom tedy měli: 1005684, 1005699.

Protože adresář může obsahovat jiné typy souborů nebo se změněnými názvy, použije se filtr.

5. Přesuňte se na kartu a filtrujte soubory jako v předchozím bodě.

6. Porovnejte soubory na kartě s proměnnou, která obsahuje poslední soubor přenesený v předchozím čase (bod 4), a zkopírujte pojmenované soubory do nově vytvořeného adresáře větší než proměnná. (protože jména jsou jen čísla).

7. Otevřete adresář obsahující nové obrázky pomocí správce souborů.

Dále vám ukážu skript s komentáři, které vysvětlují jeho fungování. Upřesňuji, že nejsem programátor a několikrát mě bolelo, než jsem začal pracovat, zvláště když jsem musel filtrovat názvy smyčky „pro“.

#! / bin / bash ### --- OVĚŘTE, POKUD JE SD MONTOVÁN --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; pak ### --- CREATE DIRECTORY --- ### # Přečtěte si adresář obrázků a vytvořte další s názvem aktuálního # data a oprávnění 755, pokud neexistuje. cd ~ / Pictures / kodak ULTDIR = `ls -1 | tail -n1` # poslední adresář v seznamu. DATE = `datum +% y.% M.% D` # Aktuální datum ve formátu YY.MM.DD, pokud [" $ LASTDIR "! =" $ DATE "]; pak mkdir -vm 755`datum +% y.% m.% d` # vytvořit adresář s aktuálním datem fi ### --- ZOBRAZIT POSLEDNÍ SOUBOR $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | ocas -n1 | cut -c1-3,5-8` # viz poslední obrázek s názvem xxx_XXXX.eee .eee = přípona souboru (JPG nebo MOV) # Chcete-li zajistit, aby skript fungoval i po jeho splnění: # 100_9999.eee -> 101_0000. eee a neexistují žádné chyby # CUT, takže je ve formátu xxxXXXX ### --- PŘESUNOUT DO POSLEDNÍHO ADRESÁŘE SEZNAMU --- ### # NEBO POSLEDNĚ VYTVOŘENO, POKUD VYTVOŘENO # cd .. ULTDIR = `ls -1 | tail -n1` # jde znovu, protože jinak to trvá předchozí ULTDIR if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER soubory v SD --- ### FILTER = `ls -1 [ 0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - POROVNÁNÍ NOVÝCH SOUBORŮ S JMENEM VĚTŠÍ NEŽ POSLEDNÍ --- ### pro I v $ FILTER do N = `echo $ I | cut -c1-3,5-8` # Název řezu if [["$ ULTIMG" -lt "$ N"]]; then cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Otevřete nový adresář pomocí Thunar else exit 0 fi exit 0

Nakonec, aby to fungovalo, jsem jej v nabídce přidal do aplikace „Removable Drives and Media“ od Xfce

Nastavení → Správce nastavení Xfce 4 → Vyměnitelné disky a média → Fotoaparáty

pomocí možnosti importovat obrázek. Po vložení karty se zobrazí dialogové okno s dotazem, zda chci importovat obrázky. Po přijetí se skript provede.

No, to je ono. Omlouvám se za nepořádek textu, je to můj první příspěvek a nevím, jak tabelovat skript při jeho úpravách. Doufám, že je pro někoho užitečné alespoň mít nápad a přizpůsobit ho každému konkrétnímu případu.

Neudělil jsem licenci, protože jsem se dobře neinformoval o každé verzi GPL, ale mohou ji kopírovat a upravovat. A neváhejte říci, jak by to mohlo být vylepšeno, nebo zda existují jiné způsoby, jak to udělat, ale jednodušší.

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   Percaff_TI99 řekl

    Velmi zajímavý Joaquín, dobrý nápad je nahrát skript do pasty, kde je snazší sdílet kód, a jak říkáte, může být přizpůsoben dalším potřebám a člověk se naučí trochu víc používat bash.

    Zdravím!

    1.    Joaquin řekl

      Hotovo, přidáno http://paste.desdelinux.net/4737
      Děkuji vám!

  2.   vr_rv řekl

    Při kopírování fotografie, která se již nachází v adresáři, to neznamená, že již jedna existuje, a dává vám možnost ji nahradit nebo nekopírovat?

    Je to velmi užitečné, protože vše dělá automaticky

    1.    Joaquin řekl

      Ahoj. Ve skutečnosti nekopíruje opakující se obrázky, pouze je ignoruje. Myšlenkou bylo přesně kopírovat nové soubory bez nutnosti interakce s uživatelem. Také, pokud nepřidáte obrázky více než jednou denně, skript zkopíruje nové soubory do nového adresáře. Vysvětlím stručně:

      Dnes je 10/03/13, vytvořím adresář s názvem 13.03.10/100/4440 a zkopíruji některé obrázky nebo video (MOV) dovnitř: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (Chybějící 4443 a 4444 byly fotoaparátem vymazány, poslední je 4445).

      Předpokládejme, že použiji skript 01. 04. 13 a na kartě budu mít nové obrázky. Skript vytvoří adresář s názvem 13.04.01 a uvnitř nových obrázků / videí, jejichž název je větší než „4445“; protože čte adresář 13.03.10 a poslední obrázek je 100_4445.JPG. Pokud ve stejný den znovu spustím skript s novými obrázky z karty, přidají se do adresáře 13.04.01. Žádné nejsou přepsány.

      Doufám, že jsem svou představu trochu objasnil 🙂

  3.   Manuti řekl

    A neznáte Rapid Photo Downloader? Myslím, že to dělá všechno a ještě víc.

    1.    Pane Blacku řekl

      Jde o to, že ten hubený to udělal sám, předpokládám, že by se bavil, a to může sloužit někomu jinému

    2.    Joaquin řekl

      Ahoj. Nevěděl jsem to a zdá se mi to dobré z toho, co jsem viděl na internetu, ale scénář ve skutečnosti dokonale splňuje to, co potřebuji; což je vložení karty a automatické kopírování všech souborů.

      Také mi pomohlo naučit se trochu víc, protože to evidentně nefungovalo poprvé; Došlo k omylům a hodně se z nich poučí.

      Neměl jsem v úmyslu ukázat skript, aby vyřešil problémy pro ostatní, existují aplikace jako ty, které zmiňujete, které jsou obecnější. Podělil jsem se o to, abyste si je přečetli, a jako referenci k vytváření nových věcí využívajících smyčky (v tomto případě „pro“) a regulární výrazy (proměnné „ULTIMG“ a „FILTER“ ve skriptu)

  4.   kódová laboratoř řekl

    Zdá se to užitečné, nechávám si ho pro případ, že ho jednou budu potřebovat. Děkuji.

    1.    Joaquin řekl

      Děkuji vám!

  5.   bez názvu řekl

    ale za to už máme grsync

    1.    Joaquin řekl

      Ano, ale myslím, že rsync se používá spíše pro zálohování. Nikdy jsem se na to nedíval, ale je to aplikace, kterou bychom měli vzít v úvahu a učit se od nás všech.

      Nevěděl jsem, že existuje grafické rozhraní pro rsync.

  6.   poslední nováček řekl

    Páni, kód mi připadá velmi zajímavý, velmi užitečný. pokračuj. 😀
    Nechám si to pro případ, že to budu potřebovat.

    Zdravím.

    1.    Joaquin řekl

      Děkuji!.