Рекурсивно перечислить количество файлов во всех глубоких подкаталогах

Я искал решение для рекурсивного перечисления количества файлов в каждом подкаталоге. Существует много решений, которые дают количество файлов в каждом подкаталоге данного начального каталога, но они, кажется, перечисляют только количество подкаталогов начального каталога, а не рекурсивно понижают древовидную структуру для всех подкаталогов. каталоги.

Например,

topdir1

sublevelA1 10 файлов

  sublevelA2    200 files  

     sublevelA3 600 files  

sublevelB1 50 файлов

  sublevelB2    123 files  

     sublevelB3 357 files  

Решения, которые я попробовал, будут дайте мне только две строки, содержащие файлы sublevelA1 810 и sublevelB1 530.

Я хотел бы получить решение, которое даст мне 6 строк сверху. Отступы не требуются.

0
задан 8 September 2019 в 11:13

1 ответ

Вы могли сделать что-то вроде этого:

find path/to/topdir1/ -type d -exec sh -c '
  d="$1"; set -- "$d"/*; printf "%s: %d files\n" "$d" "$#"
' sh {} \;

Это распечатает полные пути к подкаталогам - если Вы захотите неполные имена каталогов, изменение -exec к -execdir. Это будет включать каталоги в количества файлов.

альтернатива могла бы быть должна использовать рекурсивную функцию оболочки - отмечают однако, что это выполнит поиск в глубину, таким образом, порядок результатов не сможет быть тем, что Вы ожидаете:

#!/bin/sh

_countrecurse() {
  local c=0;
  for f in "$1"/*; do
    if [ -d "$f" ]; then
      _countrecurse "$f";
    else
      c=$(($c+1))
    fi
  done
  printf '%s: %d files\n' "$1" "$c"
}

_countrecurse "$1"

с использованием

./countrecurse path/to/topdir1/

Это будет не , включают каталоги в количества файла.

0
ответ дан 23 October 2019 в 02:51

Другие вопросы по тегам:

Похожие вопросы: