Вывести количество файлов в определенном формате итеративно в сценарии оболочки - PullRequest
0 голосов
/ 20 сентября 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 голосов
/ 20 сентября 2018

Примерно так (не проверено):

for d in [A-Z]/[A-Z]/[A-Z]/[A-Z]/[A-Z]/[0-9][0-9]
do
  [[ -d $d ]] && echo $d : $(ls $d|wc -l)
done

Обратите внимание, что это дает неверный счетчик строк, если одно из имен файлов содержит символ новой строки.

...