Я искал решение для рекурсивного перечисления количества файлов в каждом подкаталоге. Существует много решений, которые дают количество файлов в каждом подкаталоге данного начального каталога, но они, кажется, перечисляют только количество подкаталогов начального каталога, а не рекурсивно понижают древовидную структуру для всех подкаталогов. каталоги.
Например,
topdir1
sublevelA1 10 файлов
sublevelA2 200 files
sublevelA3 600 files
sublevelB1 50 файлов
sublevelB2 123 files
sublevelB3 357 files
Решения, которые я попробовал, будут дайте мне только две строки, содержащие файлы sublevelA1 810 и sublevelB1 530.
Я хотел бы получить решение, которое даст мне 6 строк сверху. Отступы не требуются.
Вы могли сделать что-то вроде этого:
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/
Это будет не , включают каталоги в количества файла.