Ricerca Di Links Interrotti

#!/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