У меня есть каталог с большим количеством подкаталогов с текстовыми файлами в них. Мне нужно знать, сколько раз «foo» появляется в каждом отдельном подкаталоге (но только на первом уровне), а не общая сумма слова «foo», существующего во всех подкаталогах. Короче говоря, я решил бы это, просто запустив вручную каждый каталог
grep -riwo 'foo' | wc -l
Очевидно, потому что их много, что невозможно. Поэтому я попробовал это в каталоге, содержащем подкаталоги
ls -1 | xargs -L1 grep -riwo 'foo' | wc -l
Но это не работает также потому, что из того, что я получил, wc
получает выходные данные только после того, как grep
выполнено во всех папках, отправка полного списка со всеми результатами в wc
, который просто выводит общую сумму «foo», встречающуюся во всех каталогах, делая xargs
ненужным в этот момент
Так как вы хотите, чтобы итоги были только для каталога верхнего уровня, добавьте простой цикл:
for d in */; do
printf '%s: ' "$d"; grep -riwo 'foo' -- "$d" | wc -l
done