печатать количество файлов для каждой подпапки итеративно - PullRequest
0 голосов
/ 01 октября 2018

У меня следующая структура папок:

A/B/C/D/E/00
A/B/C/D/E/01
.
.
A/B/C/D/E/23

Аналогично,

M/N/O/P/Q/00
M/N/O/P/Q/01
.
.
M/N/O/P/Q/23

Теперь в каждой папке от 00 до 23 содержится много файлов, которые я хотел бы посчитать.

Если я выполню эту простую команду:

ls / A / B / C / D / E / 00 |wc -l Я могу получить количество файлов в каждой из этих подкаталогов.Я хочу автоматизировать это или получить это итеративно.Кроме того, окончательный вывод, который я рассматриваю, - это файл, который должен выглядеть следующим образом:

C E RESULT OF ls /A/B/C/D/E/00 | wc -l RESULT OF ls /A/B/C/D/E/01 | wc -l
M Q RESULT OF ls /M/N/O/P/Q/00 | wc -l RESULT OF ls /M/N/O/P/Q/01 | wc -l

Итак, вывод должен выглядеть следующим образом

C E 23 23 4 6  7  4 76 98 57 2 67 9 12 34 67 0 2 3  78 98 12 3  57 213
M Q 12 10 2 34 32 1 35 65 87 8 32 2 65 87 98 0 4 12 1  35 34 76 9  67

Обратите внимание, значенияпосле алфавитов - значения количества файлов в 24 папках с 00, 01 по 23.

Использование подхода eval: я могу жестко закодировать и получить точные результаты.Но я хотел, чтобы это показывало данные за предыдущий день.Вот что я сделал:

d=`date --date ="1 days ago" +%Y%m%d`
month= `date +%Y%m`
eval echo YZ $d '"$(ls "/A/B/YZ/$month/$d/"'{20150800..20150823})'| wc -l)"'

Это прекрасно работает, потому что в указанном месте есть файлы внутри дочерних каталогов 20150800,20150801..20150823.Однако, когда я пытаюсь обобщить это, как показано ниже, он не показывает такой файл или каталог:

eval echo YZ $d '"$(ls "/A/B/YZ/$month/$d/"'{"$d"00.."$d"23})'| wc -l)"'

Есть ли что-то, что мне не хватает в приведенной выше строке?

1 Ответ

0 голосов
/ 01 октября 2018

Очень безопасный способ подсчета файлов:

find . -mindepth 1 -exec printf x \; | wc -c

Чтобы не считать рекурсивно, добавьте -maxdepth 1 перед -exec.

Некоторые другие примечания:

...