Я придумал эту цепочку:
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).