Ответы:
Там нет ничего встроенного, чтобы найти, даже GNU найти. Вы можете постобработать вывод find
сортировки по количеству слешей, например, с помощью Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
список всех входных строк;$a =~ s!/!/!g
количество косых черт $a
, которое мы используем в качестве критерия сортировки.Если вы можете использовать Zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
перечисляет все файлы в текущем каталоге и подкаталогах.oe
управляет порядком, в котором возвращаются совпадения: они сортируются по значению REPLY
после выполнения здесь кода в кавычках для каждого совпадения, для которого REPLY
изначально задан совпадающий путь.$REPLY
чтобы удалить все, кроме слэшей. Таким образом, результат состоит из всего на глубине 1 (пустой результат $REPLY
), затем всего на глубине 2 ( $REPLY
заканчивается /
), глубине 3 ( //
) и т. Д.нет
Перейти к этому вопросу на SO для обходных путей.
Я чувствую, что вы можете. Он включает в себя grep и подобные, и цикл, но я считаю, что он работает очень хорошо, особенно для вашего случая, когда поиск не нужно завершать.
Это более ресурсоемкий из-за:
Это хорошо, потому что:
#! / Bin / Баш Глубина = 0 в то время как найти -mindepth $ глубину -maxdepth $ глубину | grep '.' делать глубина = $ ((глубина + 1)) сделано
Вы также можете легко (?) Поместить его в одну строку:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Но я предпочитаю небольшие сценарии, чем печатать ...