#!/bin/bash
# broken-link.sh
# Scritto da Lee Bigelow
yahoo.com>
# Utilizzato con il consenso dell'autore.
# Uno script di pura shell per cercare i link simbolici "morti" e visualizzarli
#+ tra virgolette, in modo tale che possano essere trattati e dati in pasto a
#+ xargs :) es. broken-link.sh /unadirectory /altradirectory | xargs rm
#Il seguente, tuttavia, è il metodo migliore:
#find "unadirectory" -type l -print0|#xargs -r0 file|#grep "broken symbolic"|
#sed -e 's/^|: *broken symbolic.*$/"/g'
#
#ma non sarebbe bash pura, come deve essere.
#Prudenza: state attenti al file di sistema /proc e a tutti i link circolari!
#
# Se nessun argomento viene passato allo script, la directory di ricerca
#+ directorys viene impostata alla directory corrente. Altrimenti directorys
#+ viene impostata all'argomento passato.
#
[ $# -eq 0 ] && directorys=`pwd` || directorys=$@
#
# Implementazione della funzione verlink per cercare, nella directory
# passatale, i file che sono link a file inesistenti, quindi visualizzarli
#+ tra virgolette. Se uno degli elementi della directory è una sottodirectory,
#+ allora anche questa viene passata alla funzione verlink.
#
verlink () {
for elemento in $1/*; do
[ -h "$elemento" -a ! -e "$elemento" ] && echo "$elemento"
[ -d "$elemento" ] && verlink $elemento
# Naturalmente, '-h' verifica i link simbolici, '-d' le directory.
done
}
# Invia ogni argomento passato allo script alla funzione verlink, se è una
#+ directory valida. Altrimenti viene visualizzato un messaggio d'errore e le
#+ informazioni sull'utilizzo.
#
for directory in $directorys; do
if [ -d $directory ]
then verlink $directory
else
echo "$directory non è una directory"
echo "Utilizzo: $0 dir1 dir2 ..."
fi
done
exit 0