"html-index" Creazione indici HTML
#!/bin/bash
# html-index
# Script che scandisce un albero di directory e crea un file html
# di indice in ogni sottodirectory
# Stefano Salvi <stefano@salvi.mn.it>
# this file is available under the GNU general public license
# controlla che ci sia un parametro e che questo corrisponda ad una directory
if [ ! "$1" ]
then
echo "Devi indicare la directory nella quale fare l'indice"
exit 1
fi
if [ ! -d "$1" ]
then
echo "$1 non e' una directory"
exit 2
fi
# Stampa una riga di tabella con il link ad una directory o file da vedere
# $1 -> File
# $2 -> Descrizione
# $3 -> Link
# $4 -> Azione
function view {
# produce la riga di tabella
echo "<tr><td>$1</td><td align=\"center\">$2</td><td align=\"center\"><a href=\"$3\">$4</a></td></tr>"
}
# Stampa una riga di tabella con il link ad un file da scaricare
# $1 -> File
# $2 -> Descrizione
# $3 -> File con i caratteri corretti per il Web
function download {
# lista il file (ls), ne estrae la dimensione (awk) e inserisce i punti (sed)
DIMENSIONE=`ls -l "$1" | awk '{ print $5 }' | \
sed -e "s/\([0-9]\)\([0-9][0-9][0-9]\)$/\1.\2/" -e "s/\([0-9]\)\([0-9][0-9][0-9]\.\)/\1.\2/"`
# Stampa la riga della tabella
echo "<tr><td>$1</td><td align=\"center\">$2</td><td align=\"center\"><a href=\"$3\">scarica</a> ($DIMENSIONE byte)</td></tr>"
}
# Stampa un file "index.html"; ricorsivamente, si richiama e redirige il
# risultato sugli "index.html" delle sottodirectory
# Parametri:
# $1 -> percorso corrrente (titolo)
# $2 -> locazione directory corrente (per CD)
function index {
# Dichiara due directory "locali", cioe' diverse per ogni invocazione
# della funzione
local OLDPWD
# Recupera il percorso precedente, per tornarci
OLDPWD=`pwd`
# Entra nella directory indicata
cd "$2"
# Stampa la testata del file HTML (html molto grezzo)
echo "<html>"
echo "<head>"
echo "<title>Files in $1</title>"
echo "<body>"
echo "<h1 align=\"center\">Files in $1</h1>"
echo "<p align=\"center\">[<a href=\"../index.html\">Directory Superiore</a>]</p>"
echo "<table border=\"1\" align=\"center\">"
# Fa' un ciclo sui nomi dei file della directory idicata (corrente)
for f in *
do
# Corregge il nome file
FILE=`echo "$f" | \
sed -e "s/ /%20/g" -e "s/\//%5f/g"`
# Se il file corrente e' una directory
if [ -d "$f" ]
then
# Produce la figa di tabella che vi rimanda
view "$f" "[Directory]" "$FILE/index.html" "entra"
# si richiama ricorsivamente, per generarne l'indice
index $1/$f $f > $f/index.html
# Altrimenti (e' un file) se e' "index.html" (se stesso)
elif [ "$f" = "index.html" ]
then
#l'index stesso - non lo lista
echo "<!-- Index.html saltato -->"
else
# estrae l'estensione del file
ESTENSIONE=`echo $f | /bin/sed "s/^.*\.\([^.]*\)$/\1/"`
# se l'estensione coincide con il file,
# il file non ha estensione
if [ "$ESTENSIONE" = "$f" ]
then
ESTENSIONE="senza tipo"
fi
# In base all'estensione....
case $ESTENSIONE in
htm | html)
view "$f" "Pagina WEB" "$FILE" "Leggi"
;;
txt)
view "$f" "Documento di testo" "$FILE" "Leggi"
;;
*)
download "$f" "file $ESTENSIONE" "$FILE"
;;
esac
fi
done
# stampa la coda del file HTML
echo "</table>"
echo "</body>"
echo "</html>"
# Ritorna alla directory precedente
cd $OLDPWD
}
# richiama la funzione che produce l'indice principale dell'archivio
# e lo immagazzina nel file indice della directory
index "Archivio" $1 > $1/index.html