Відповіді:
Немає нічого вбудованого, щоб знайти, навіть 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 для вирішення проблем.
Моє відчуття, що ти можеш. Він включає в себе греп, і таке, і цикл, але я вважаю, що це працює дуже добре, спеціально для вашого випадку про знахідку, яка не потребує завершення.
Він більш ресурсомісткий через:
Це добре тому, що:
#! / бін / баш глибина = 0 при цьому знайдіть -mindepth $ глибина -maxdepth $ глибина | греп '.' робити глибина = $ ((глибина + 1)) зроблено
Ви також можете легко встановити його на одну лінію (?):
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Але я віддаю перевагу невеликим сценаріям над набором тексту ...