Как выловить все битые ссылки?

Случается, что необходимо найти все битые ссылки (т.е. ссылки которые указывают на файлы, которых уже не существует).

Поможет простенькая коммандочка:

find /path -type l | while read link; do [ -e `readlink $link` ] || echo $link; done

здесь:

  • find /path -type l - ищем все ссылки в каталоге /path и передаем их по конвееру while'у
  • while read link - while'ом построчно читаем и засовываем в переменную link
  • readlink $link - читаем ссылку (т.е. куда она указывает)
  • [ -e `readlink $link` ] - проверяем результат выполнения readlink'а на существование
  • || echo $link - ИНАЧЕ файла, на который указывает ссылка, не существует - выводим его в stdout

Что делать потом с ними - решать вам! :)
Можно удалить их:

find /path -type l | while read link; do [ -e `readlink $link` ] || echo $link; done|xargs rm -f
или
find /path -type l | while read link; do [ -e `readlink $link` ] || rm -f $link; done

Можно перенести их куда-нибудь:
find /path -type l | while read link; do [ -e `readlink $link` ] || mv $link /dest_path; done

И прочее-прочее! Все зависит от вашей фантазии! ;)