Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Automatická akce složky  (Přečteno 4498 krát)

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Automatická akce složky
« kdy: 08 Března 2013, 15:07:47 »
Rozhodl jsem se zkusit napodobit automatickou akci složky z macovského automatoru. Nedaří se mi ale překonat typické neznalosti...

Kód: [Vybrat]

#!/bin/bash
dir="$HOME/Plocha/bmp2jpg/"
inotifywait -qm -e close_write --format=%w%f "dir" | while read file
do
           [[ $file =~ \.bmp$ ]] && convert $file $file.jpg
done

Je mi jasné, že tvou dvojitou závorkou bych měl definovat proměnnou pomocí regulárního výrazu \.bmp$, nejsem si jistý uvozovkami u convert, každopádně když do složky cokoliv vložím, hlásí mi to [[: not found  ???

Věděl by někdo?
Nu což, linux JE závislost, a ne že ne…

pacholik

  • Závislák
  • ****
  • Příspěvků: 2072
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #1 kdy: 08 Března 2013, 16:57:49 »
> nejsem si jistý uvozovkami u convert
Jestli budou v názvech mezery tak budou potřeba. A jelikož jsou tam proměnné tak jedině dvojité.
Kód: [Vybrat]
convert "$file" "$file.jpg"
> [[: not found
Zřejmě ten skript spouštíš sh skript.sh. Buď to spouštěj bash skript.sh nebo tomu dej spustitelný příznak a spouštěj to ./skript.sh. [[ je čistě bashovská záležitost.

P.S. aby se ti ten soubor nejmenoval soubor.bmp.jpg, ale soubor.jpg tak
Kód: [Vybrat]
convert "$file" "${file%.bmp}.jpg"

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #2 kdy: 08 Března 2013, 18:23:39 »
Tak teď už se jen dostat přes
Kód: [Vybrat]
convert: unable to open image `{/home/honzuska/Plocha/jpg2bmp/WildWheat_by_Brian_Burt.jpg%bmp}.jpg':  @ error/blob.c/OpenBlob/2587.
  :)
« Poslední změna: 08 Března 2013, 18:25:41 od Welblaud »
Nu což, linux JE závislost, a ne že ne…

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #3 kdy: 08 Března 2013, 18:33:47 »
Tak teď už se jen dostat přes
Kód: [Vybrat]
convert: unable to open image `{/home/honzuska/Plocha/jpg2bmp/WildWheat_by_Brian_Burt.jpg%bmp}.jpg':  @ error/blob.c/OpenBlob/2587.
  :)

Někde jsi něco zeslonil ;) Evidentně ta substiuce neproběhla správně, takže jsi radu pacholika implementoval špatně. Ten $ měl být před závorkou.

Cuore

  • Závislák
  • ****
  • Příspěvků: 2534
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #4 kdy: 08 Března 2013, 18:55:17 »
k čemu to je dobré??  ::) můžeš se trochu rozepsat  ;) díky

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #5 kdy: 08 Března 2013, 19:29:39 »
Díky, už to funguje.  :) Věděl by nějaký pan rada, jak přidat do testu víc podmínek? Např. nejen bmp, ale i tiff apod.? Se to hezky rýsuje.

To Cuore: No to si člověk udělá takovou složku a pak tam jen hází fotky z foťáku a ony se zmenší, aby se daly posílat mailem, když to děláš často, je to fajn (nebo se to dá rovnou ze složky odesílat apod.)
Nu což, linux JE závislost, a ne že ne…

Cuore

  • Závislák
  • ****
  • Příspěvků: 2534
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #6 kdy: 08 Března 2013, 20:03:47 »
takže zmenšovadlo  ;D .... jo a velikost výstupní fotky děláš jak? Až to budeš mít hotovo, můžeš to dát do posledního příspěvku jako celek s popisem funkce? Věřím, že se to bude hodit více lidem  ;)

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #7 kdy: 08 Března 2013, 20:17:37 »
Milerád! No tak tohle je jen model, co se týče zmenšování, to se přidá pak, to už zvládnu, hrůza jsou proměnné a testování  :)

Zrovna s tímhle (inotify) se dá asi vymyslet pekelně hodně věcí.

Dobrý, takže když  dám do testovacích závorek vykřičník, pak všechno, co NENÍ jpg, převede se do něj. Nu, ještě bych rád věděl specifikaci jen více parametrů, např. bmp + tiff, jak jsem psal. Předpokládám, že bude nutné taky změnit přípony v těch {} závorkách dále.
« Poslední změna: 08 Března 2013, 20:26:06 od Welblaud »
Nu což, linux JE závislost, a ne že ne…

pacholik

  • Závislák
  • ****
  • Příspěvků: 2072
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #8 kdy: 08 Března 2013, 22:51:52 »
Kód: [Vybrat]
[[ $file =~ \.(bmp|png|tiff)$ ]]

"${file%.*}.jpg"

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #9 kdy: 09 Března 2013, 07:40:13 »
Pěkně, díky moc, budu zkoušet.
Nu což, linux JE závislost, a ne že ne…

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #10 kdy: 09 Března 2013, 10:45:03 »
k čemu to je dobré??  ::) můžeš se trochu rozepsat  ;) díky

Inotify a vlastní akce založené na událostech ve filesystému

Věděl by nějaký pan rada, jak přidat do testu víc podmínek? Např. nejen bmp, ale i tiff apod.?

Ta podmínka se dá napsat univerzálněji, aby nezáleželo na velikosti písmen třeba takhle:
Kód: [Vybrat]
if egrep -iq '\.(bmp|png|tiff)$' <<< $file; then ... ; else ... ; fi

Cuore

  • Závislák
  • ****
  • Příspěvků: 2534
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #11 kdy: 09 Března 2013, 11:11:44 »
Citace
Inotify a vlastní akce založené na událostech ve filesystému
přiznám se, že jsem výraz "macovský automator" slyšel poprvní v životě  ::) a navíc jsem byl v noci v práci, tak nebyl čas se dloubat v příkazech a googlu  :D takže to doženu. GdH sice tvůj blog čtu, ale tohle jsem vypustil, asi proto, že titulek inotify mi nic neřekl  ;D

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #12 kdy: 09 Března 2013, 11:16:10 »
No ten příspěvek jsem právě neminul  :) Z něj jsem vycházel.

Automator je prostě něco jako v linuxu Xpresser nebo Actionaz, jen na mnohem přívětivější úrovni.
Nu což, linux JE závislost, a ne že ne…

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #13 kdy: 09 Března 2013, 11:46:16 »
.. asi proto, že titulek inotify mi nic neřekl  ;D

To mě u tebe překvapuje, že bys nebyl zvědavej :)

Cuore

  • Závislák
  • ****
  • Příspěvků: 2534
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #14 kdy: 09 Března 2013, 17:10:45 »
.. asi proto, že titulek inotify mi nic neřekl  ;D

To mě u tebe překvapuje, že bys nebyl zvědavej :)
díky za poklonu... snažím se  ::)

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #15 kdy: 10 Března 2013, 21:01:49 »
Bohajeho!  :D Chtěl jsem si to trochu osahat, ale jak teď postoupit dál? Rád bych jednoduše > vem fotky > přetáhni do složky > změň velikost > prdni do adresáře s názvem, který zadáš > zazipuj. První část se mi po radách tady daří vcelku dobře, dokonce vytvořím adresář, zipovat složku to taky umí, ale jak udělat tu posloupnost, aby se to všechno vlastně zabalilo až nakonec? Možná na to jdu hodně zbrkle, ale... na konci bych to taky asi zazipoval, ale to naskládání do adresáře se $jménem se nějak nedaří, tam to dá je jednu fotku, navíc název zadávám tolikrát, kolik je fotek (tudíž to vytvoří jednou adresář, ten to pak chce pořád přepisovat...

Kód: [Vybrat]

#!/bin/bash
dir="$HOME/Plocha/fotkouzlo/"
inotifywait -qm -e close_write --format=%w%f "$dir" | while read file
do
           [[ $file =~ \.JPG$ ]] && convert "$file" -resize 60% "${file%JPG}jpg" && rm "$file"
&& jmeno=$(zenity --entry --text "Zadej jméno zipu: ") && mkdir ./fotkouzlo/"$jmeno" && mv ./fotkouzlo/*.jpg ./fotkouzlo/"$jmeno"
done


« Poslední změna: 10 Března 2013, 21:22:21 od Welblaud »
Nu což, linux JE závislost, a ne že ne…

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #16 kdy: 10 Března 2013, 21:33:46 »
Tohle není schopné rozpoznat, že jsi tam dal jeden seznam souborů, to prostě reaguje na každý zapsaný soubor zvlášť. Leda bys tam přetáhl celý adresář. Pokud chceš dělat úpravu označených fotek, byla by lepší akce do Nautila: označíš soubory > z kontextového menu vybereš akci > a dál už to řeší skript, který dostane seznam souborů.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #17 kdy: 10 Března 2013, 21:41:08 »
Jedině bys na to mohl navěsit skript, který by řešil nějaký timeout po každé události a dokud by nebyl překročen jen sbíral cesty, které by pak zpracoval najednou.

Mimochodem, proč to řešíš přes inotifywait, když pro tento účel by byl pohodlnější a spolehlivější incron, který jsem v článku také popsal.

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #18 kdy: 11 Března 2013, 07:59:44 »
Tak incron tedy zkouším, ale nedobírám se, možná protože když se ukládá konfigurace, zapisuje se automaticky někam do TEMPu, nevím proč a nevím, jestli bych to měl uložit někam jinam. Nedělá to vůbec nic.

Celý figl má spočívat v tom, že když mi rodiče, co oba používají XFCE, posílají fotky, mohli by je posílat prostě jako balík v zipu, a to zmenšený (kdo by neznal 15 příloh v mailu, každá 1MB  ;) ), takže ten slavný skript v nautilu by moc neupotřebili. Rád bych, aby to uživatelsky bylo co nejjednodušší. Vrtá mi hlavou, proč by tam nešlo udělat něco jako „až tohle všechno uděláš, práskni to do adresáře a ten zazipuj“. Nezavání to spíš nějakými dalšími podmínkami? (while, case atd.?)
Nu což, linux JE závislost, a ne že ne…

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #19 kdy: 11 Března 2013, 09:44:26 »
Ok. V tomto případě opravdu bude lepší inotifywait, protože pořebuješ zpracovávat ta data postupně a incron by volal skript znova pro každý soubor, to jsem včera nedomyslel. Pokud bychom neřešili nějaké timeouty, mohlo by se to napsat tak, aby se to optalo na jméno budoucího zipu jen tehdy, pokud v adresáři žádný zip nebude a opačném případě do něj jen přidávat další soubory. Když to uživatel naplní, zip z adresáře přesune/smaže a příště celé od začátku.

Welblaud

  • Člen
  • **
  • Příspěvků: 190
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #20 kdy: 11 Března 2013, 09:59:34 »
No dobrá, ale jak?  :) Jak jsem psal, problém mám s tím, že se to vlastně ptá na jméno zipu u každého souboru. To by technicky asi šlo tak, že by se tam použilo něco jako >> přilepení na konec, jenže to je samozřejmě taky na houby.

Celé to asi má sestávat z následujícího:

1) zmenšení
2) smazání originálů
2) zeptat se na jméno zipu
3) zipovat všechny jpg ve složce a smazat originály

Původně jsem to zkoušel jen jako zip nakonec všeho ve složce, bez ptaní na jméno zipu. To fungovalo, i když to vlastně evidentně ty soubory do toho zipu strkalo postupně. To asi nevadí, v tuhle chvíli tedy vadí jen to, že se to ptá na jméno zipu, tam možná bude zakopanej pes. Když jsem to zipoval bez toho, zipovalo se to defaultně s názvem nadřazený složky, a to se mi nelíbí :)

Nu což, linux JE závislost, a ne že ne…

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re:Automatická akce složky
« Odpověď #21 kdy: 11 Března 2013, 10:16:27 »
Vždyť je to evidentní. Prostě přidáš podmínku, která při zpracování každého souboru zjistí, jestli zip soubor existuje a pokud ne, zeptá se na jméno a vytvoří ho. Pak do něj strkáš každý další zpracovaný soubor. Pochop, že nezpracováváš dávku, ale proud dat - každý soubor, jeden průchod smyčkou, každý soubor samostatné zpracování. Žádné ukidím nakonec, uklízet musíš průběžně.

beer

  • Host
Re:Automatická akce složky
« Odpověď #22 kdy: 11 Března 2013, 10:17:47 »

2) zeptat se na jméno zipu
3) zipovat všechny jpg ve složce a smazat originály


To zipování mi připadá jako naprosto zbytečné u obrázků. Prostro navíc tím nezískáš. Osobně bych si místo toho nastavil raději zálohování do cloudu, ale přímo těch obrázků. Google Docs, Picasa, Dropbox, Flickr, a pod. V případě třeba toho dropboxu si můžeš vygenerovat seznam přímých veřejných odkazů.

Cuore

  • Závislák
  • ****
  • Příspěvků: 2534
    • Zobrazit profil
Re:Automatická akce složky
« Odpověď #23 kdy: 11 Března 2013, 10:21:52 »
to zipování nedělá z důvodu úspory místa, ale jako součást jednoduchého odeslání e-mailu  jen s jednou přílohou.... ;)

beer

  • Host
Re:Automatická akce složky
« Odpověď #24 kdy: 11 Března 2013, 10:24:34 »
to zipování nedělá z důvodu úspory místa, ale jako součást jednoduchého odeslání e-mailu  jen s jednou přílohou.... ;)

Hmm, tak mne přijít mail s obrázky v zipu, tak je snad ani nestahuji, když nevidím, co v nich je.
Výhodu v tom nevidím -  není vidět náhled obrázku v prohlížeči, práce navíc s rozzipováním, nemohu si selektivně vybrat, co chci stáhnout.

Přitom se dá poslat třeba jen seznam odkazů a obrázky se mohou poslat moderně přes cloud.

Například by to mohlo fungovat takto:
Kód: [Vybrat]
find *.jpg|while read line; do dropbox puburl "$line"; done > obrazky.txt
Ještě by to šlo určitě nějak upravit, aby místo obyčejného seznamu odkazů se generovala galerie s obrázky uloženými třeba na tom dropboxu a posílal by se jen index.html, případně by se galerie odeslala přímo ve formátu html e-mailem.
« Poslední změna: 11 Března 2013, 10:31:51 od beer »

 


Provoz zaštiťuje spolek OpenAlt.