3

Как мне рекурсивно подсчитать все файлы определенного типа в zsh?

Есть довольно много способов сделать это (полезные вопросы SuperUser, такие как этот, дают указатели), но мало специфичных для zsh методов.

Это следует из моего предыдущего вопроса - мне было дано несколько специфичных для zsh решений, поэтому я запишу их здесь на случай, если кто-нибудь еще захочет это сделать.

2 ответа2

4

Специфичной для zsh особенностью является zsh globbing; Я не до конца понимаю, но это работает.

  1. $ a=( **/*.(cpp|h)(.) ); print $#a

    Считает все файлы, оканчивающиеся на .cpp и .h рекурсивно, из текущего каталога, затем выводит результат в виде единого числа.

  2. Из этого ответа я также могу использовать:

    $ ls **/*.{cpp,h} | wc -l

Специфическая часть zsh - это расширение **/*.{cpp,h} для соответствия файлам, заканчивающимся на .cpp и .h . Я еще не нашел (простого) всеобъемлющего описания глобализации zsh, которое мне удалось понять (хотя это довольно хорошо объясняет использование **/*.{a,b} ).

1

Для правильного подсчета совпадений: a=( */.(cpp|h)(.N) ); print $#a

Чтобы избежать утечки переменной: local -a a; a=( */.(cpp|h)(.N) ); print $#a

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .