Відповіді:
Немає нічого вбудованого, щоб знайти, навіть 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
Але я віддаю перевагу невеликим сценаріям над набором тексту ...