Есть ли какая-либо команда или группа команд, которые могут считать количество всех подкаталогов, рекурсивно запускающихся с определенной определенной буквы?
Можно использовать комбинацию 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)
однако знать, что количество может быть неточным, если какие-либо имена каталогов включают символы новой строки (редкий - но законный).
find . -type d -not -path '.' -printf 0 | wc -c ;
Рекурсивно находят, что все каталоги (-тип d) в текущем каталоге (находят). это не каталог и печать 0 для каждого найденного каталога. Затем wc -c
количества количество символов (0) от предыдущей команды производится.
С остротой 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.