Вы использовали опцию -l
:
Переходит по символическим ссылкам, если они указывают на каталоги, как если бы они были каталогами. Символьные ссылки, которые приведут к рекурсии, избегаются при обнаружении.
Теперь, причина, по которой оно печатает это предупреждение, не в том, что оно на самом деле повторяется. Мы ясно видим, что он просто снова перечислит дерево bbb/ccc
.
Я предполагаю, что настоящая проблема - это проблема остановки: команда tree
не может знать, будет ли она бесконечно повторяться, и поэтому она должна прекратить уже, когда обнаруживает символическую ссылку на каталог, который она уже посетила - даже если после этого каталог будет просто печатать поддерево, а не рекурсивно.
Даже если вы можете остановить рано или после заранее определенного числа рекурсий, все это делается для того, чтобы не использовать бесконечные объемы памяти. По крайней мере, это моя интерпретация.
Соответствующий код здесь, кстати. Если номер индекса каталога, на который указывает символическая ссылка, найден в хеш-таблице (которая заполняется с помощью saveino
и findino
), он просто пропустит ее.