[Linuxtrent] Re: Script (o simile) di conversione automatica foto

  • From: Shinsan Hattori <hattorishinsan@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Sun, 4 Jan 2015 12:25:43 +0100

Il 4 gennaio 2015 02:38, Antonio Galea <antonio.galea@xxxxxxxxx> ha scritto:
> Sì, l'output è configurabile:
>
>    http://linux.die.net/man/1/inotifywait
>
> Ripensandoci, però, il solo evento close_write è troppo poco: visto
> che hai in mente cartelle annidate e cancellazioni, a occhio e croce
> ti occorre gestire anche create (per le directory nuove), delete,
> move_from, move_to (magari anche delete_self e move_self, non saprei).

Grazie della dritta, ora vado a vedermi con calma i vari eventi

> Essenzialmente, la destinazione è un "mirror" dell'originale, per
> tutto tranne che per i jpg che vanno riscalati.

Non proprio. La destinazione riproduce esattamente l'albero directory,
ma livello files dovrebbe contenere (almeno in via ideale) solo i jpg
riscalati. Comunque non dovrebbe cambiare molto a livello di script
(solo le opzioni di rsync)

>   # chiama copy_with_resize (che devi scriverti) su tutti i file .jpg
>   # presenti in src/ che sono più nuovi dell'equivalente in dst/
>   for f in `find src/ -name \*.jpg`
>   do
>      t = dst${f#src}
>      test $f -nt  $t && copy_with_resize $f $t
>   done

Questo non lo capisco. Cioè, capisco il concetto ma non il comando. In
particolare mi interesserebbe avere un'idea della precisione con la
quale valuta la differenza tra la data del file in src e in dst
(secondi? minuti? ore? giorni?).

> Il codice non l'ho testato, ma almeno come esempio dovrebbe bastare.

Figurati, ora lo testo io e vedo se capisco come funziona :)

Grazie mille,
Nicola

Il 4 gennaio 2015 02:38, Antonio Galea <antonio.galea@xxxxxxxxx> ha scritto:
> 2015-01-04 1:12 GMT+01:00 Shinsan Hattori <hattorishinsan@xxxxxxxxx>:
>>
>>> io terrei monitorata la cartella principale con inotifywait. Ad ogni evento 
>>> close_write lancerei lo script per riscalare le immagini,
>>> che produce il suo output in una diversa cartella sulla stessa macchina.
>> Anche questo è da vedere... Mi par di capire che dovrebbe avere il vantaggio 
>> di non passare per cron e di non dover fare la
>> comparazione tra le due cartelle. Il dubbio è il tipo di output che 
>> close_write produce, in particolare se è possibile fare in modo
>> che lo script agisca diversamente se si tratta di 
>> rimozione/modifica/aggiunta di file immagine/file di altro 
>> tipo/sottocartelle. Se così
>> non fosse tocca di nuovo far fare allo script la comparazione delle 
>> directory, giusto?
>
> Sì, l'output è configurabile:
>
>    http://linux.die.net/man/1/inotifywait
>
> Ripensandoci, però, il solo evento close_write è troppo poco: visto
> che hai in mente cartelle annidate e cancellazioni, a occhio e croce
> ti occorre gestire anche create (per le directory nuove), delete,
> move_from, move_to (magari anche delete_self e move_self, non saprei).
>
>> Dunque, lo schema dovrebbe essere il seguente:
>> [...]
>
> Essenzialmente, la destinazione è un "mirror" dell'originale, per
> tutto tranne che per i jpg che vanno riscalati. Se per semplicità vuoi
> restare sul cron, qualcosa così dovrebbe andare (se usi bash):
>
>   # sincronizza src/ con dst/, eccetto i file .jpg
>   rsync -a --delete --exclude \*.jpg src/ dst/
>   # chiama copy_with_resize (che devi scriverti) su tutti i file .jpg
>   # presenti in src/ che sono più nuovi dell'equivalente in dst/
>   for f in `find src/ -name \*.jpg`
>   do
>      t = dst${f#src}
>      test $f -nt  $t && copy_with_resize $f $t
>   done
>   # elimina i jpg presenti solo in dst/
>   for t in `find dst/ -name \*.jpg`
>   do
>      f = src${f#dst}
>      test -f  $f || rm $t
>   done
>
> Il codice non l'ho testato, ma almeno come esempio dovrebbe bastare.
>
> Antonio
> --
> Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
> "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx
>
>
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: