Я придумал эту цепочку:
find . -type l -ls | egrep -o -- '-> .+$' | sort | uniq -c
Он перечисляет все символические ссылки, greps для того, что идет после -> , сортирует и группирует его.
Это первый шаг, но далеко не идеальный. Вы можете запустить find в / чтобы получить большой список, но если символическая ссылка относится к относительной цели, команда сгруппирует их вместе, даже если они не совпадают.
Пример:
/home/shi/bin/list.sh -> ./show.sh
/home/shi/sbin/all.sh -> ./show.sh
show.sh могут быть разными программами - одна в bin а другая в sbin .
Другой проблемой являются обычные имена файлов с -> в них (хотя и не очень часто). Формат ls не может отличить это.
Пример:
test.sh -> all.sh -> list.sh
Файл с именем test.sh может ссылаться на all.sh -> list.sh или файл с именем test.sh -> all.sh может ссылаться на list.sh
Я надеюсь, что это поможет в вашем случае. Для идеального решения вы должны использовать скрипт (sh, PHP, Perl).