перший варіант в утиліті `find 'Linux?


12

Чи є в утиліті `find 'який-небудь перший / глибинний перший варіант?

Відповіді:


5

Немає нічого вбудованого, щоб знайти, навіть 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 ( //) тощо.

1
Процес публікації сортування дуже цікавий, проте сортування потребує пошуку, щоб завершити, і ви не зможете контролювати перерву.
Xiè Jìléi


1

Моє відчуття, що ти можеш. Він включає в себе греп, і таке, і цикл, але я вважаю, що це працює дуже добре, спеціально для вашого випадку про знахідку, яка не потребує завершення.

Він більш ресурсомісткий через:

  • Багато розгинання
  • Багато знахідок
  • Кожен каталог перед поточною глибиною потрапляє на пошук стільки разів, скільки є загальної глибини структури файлу (це не повинно бути проблемою, якщо у вас практично будь-яка кількість оперативної пам'яті ...)

Це добре тому, що:

  • Він використовує bash та основні інструменти gnu
  • Її можна зламати, коли захочеш (як ти бачиш, що шукали від мухи)
  • Він працює на рядок, а не на пошук, тому наступні команди не повинні чекати знаходження та сортування
  • Він працює на основі фактичного поділу файлової системи, тому якщо у вас є каталог з косою рисою, він не буде перерахований глибше, ніж є; якщо у вас налаштований інший роздільник шляхів, ви все одно добре.
#! / бін / баш 
глибина = 0

при цьому знайдіть -mindepth $ глибина -maxdepth $ глибина | греп '.'
робити
    глибина = $ ((глибина + 1))
зроблено

Ви також можете легко встановити його на одну лінію (?):

depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done

Але я віддаю перевагу невеликим сценаріям над набором тексту ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.