[pubblico] Script per creare sfondi XML ricorsivi (Gnome) [messaggio #38679] |
lun, 16 maggio 2011 01:46 |
Carlo MILIANO Messaggi: 12 Registrato: aprile 2011 |
Junior Member |
|
|
Dopo essermi scaricato 3 Gb o giù di lì di sfondi, divisi per
categorie, mi sono trovato ad avere decine e decine di sottodirectory
contenenti sfondi diversi.
Non ho però trovato qualcosa che lavorasse in automatico e
ricorsivamente: le utility per generare XML che ho trovato in rete
sono più o meno interattive e non ricorsive, adatte a volumi ridotti
di files e/o directories.
Ho pensato quindi di creare uno script bash per automatizzare la
creazione di sfondi XML (tipo Cosmos, per intenderci) sotto Gnome.
Lo script è ricorsivo e, alla fine, ogni directory contiene un file
<directory>_walls.xml
La durata della slide e della transizione sono personalizzabili
N.B.: lo script originale utilizza una piccola utility per verificare
che i parametri siano correttamente valorizzati, ma in questo script
ho omesso il controllo mettendoci il commento davanti
PS: apprezzo consigli su modi e/o comandi più efficienti
------------------------
#!/bin/bash
# usage: $0 <directory> <duration> <transition>
# duration and transition are expressed in seconds.decimals
# e.g.:
# $ $0 thatdir 1795.0 5.0
#
PROGRAM="$(echo $0 | sed 's/.*\///')"
WORKDIR="$1"
DURATION="$2"
TRANSITION="$3"
# check parameters
# . needed WORKDIR "missing working directory"
# . needed DURATION "missing static duration"
# . needed TRANSITION "missing transition duration"
function static () (
cat <<__EOF__
<static>
<duration>$DURATION</duration>
<file>$1</file>
</static>
__EOF__
)
function transition () (
cat <<__EOF__
<transition>
<duration>$TRANSITION</duration>
<from>$1</from>
<to>$2</to>
</transition>
__EOF__
)
cd $WORKDIR
WALL="$WORKDIR""_walls.xml"
DIRPATH="$(pwd)"
cat >"$WALL" <<__EOF__
<background>
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
<!-- This animation will start at midnight. -->
__EOF__
(for FILE in *; do
# normalize filename to lowecase, remove spaces - insert any
additional normalization constraint here
FILE_NEW="${FILE,,}"
FILE_NEW="${FILE_NEW/ /_}"
# check to avoid moving a dir within itself, or a file onto
itself
if [ "$FILE" != "$FILE_NEW" ] ; then
mv "$FILE" "$FILE_NEW"
fi
FILE="$FILE_NEW"
if [ -d "$FILE" ]; then
# recurse subdir
$PROGRAM "$FILE" "$DURATION" "$TRANSITION"
fi
done ;
# loop only thru image files
IMAGES="*jpg *jpeg *png *tiff *gif"
ls $IMAGES 2>/dev/null) | while read FILE ; do
FILE="$DIRPATH/$FILE"
echo $FILE
(if [ "$OLDFILE" != "" ] ; then
transition $OLDFILE $FILE
fi
static $FILE) >>"$WALL"
OLDFILE="$FILE"
done
echo "</background>" >>"$WALL"
|
|
|