Рекурсивно считайте количество подкаталогов

Есть ли какая-либо команда или группа команд, которые могут считать количество всех подкаталогов, рекурсивно запускающихся с определенной определенной буквы?

0
задан 15 July 2017 в 06:35

3 ответа

Можно использовать комбинацию find и wc команды

, Например, для подсчета каталогов, запускающихся в текущем каталоге . и запускающихся с буквы'

find . -type d -name 's*' -printf "1" | wc -c

-name соответствия условия против названия каталога, с помощью правил сопоставления с образцом оболочки (также возможно соответствовать использованию синтаксис регулярного выражения , однако который был бы излишеством здесь). -printf "1" часть печатает символ 1 каждый раз, когда соответствие найдено, и wc -c количества эти символы.

выбор 1, поскольку символ, распечатанный и считаемый, произволен.

<час>

Для отображения и количество Вы могли сделать

find . -type d -name 's*' | tee >(wc -l)

однако знать, что количество может быть неточным, если какие-либо имена каталогов включают символы новой строки (редкий - но законный).

4
ответ дан 30 September 2019 в 02:05

find . -type d -not -path '.' -printf 0 | wc -c ;

Рекурсивно находят, что все каталоги (-тип d) в текущем каталоге (находят). это не каталог и печать 0 для каждого найденного каталога. Затем wc -c количества количество символов (0) от предыдущей команды производится.

0
ответ дан 30 September 2019 в 02:05

С остротой Python:

$ tree top
top
├── sub1
│  └── another_subdir
├── sub2
└── sub3

4 directories, 0 files

$ python -c 'import os,sys;print(sum([ 1 for r,s,f in os.walk(sys.argv[1]) for i in s if i.startswith("s")    ]))' ./top                             
3

Острота работает так:

  • Мы собираемся передать каталог, который мы хотим пересечь как параметр командной строки, и для этого нам нужно sys модуль, в то время как для обхода каталога нам нужно os.walk() функция - следовательно нам нужен 'модуль OS.
  • print() распечатает вывод sum() который суммирует все объекты в списке, который мы создаем через понимание списка ( [i for i in iterable] форма).
  • Понимание списка можно рассматривать как два вложенных для циклов. На каждом повторении os.walk() дает главный каталог, его список подкаталогов и его список файлов. Когда мы выполняем итерации s список подкаталогов, мы проверим, запускается ли каждый подкаталог с буквы s , через .startswith() метод, и если это делает, 1, поставится к списку. Таким образом sum() в основном сложит вместе длинный список 1's.
0
ответ дан 30 September 2019 в 02:05

Другие вопросы по тегам:

Похожие вопросы: