Как считать общее количество файлов во всех подкаталогах?

l назвали каталог /data/ который содержит два подкаталога: /data/train/ и /data/test/. train и test каждый содержит 101 подкаталог (101 каталог в train и 101 в test).

Эти каталоги содержат изображения jpeg. Я хочу циклично выполниться через все каталоги к:

  1. Считайте общее количество изображений
  2. Считайте количество изображений содержавшимся в каждом каталоге
3
задан 13 November 2017 в 06:14

3 ответа

Читать man find, и сделайте что-то как

find /data/train /data/test -type f -print | wc -l

for dirname in $(find /data/train /data/test -type d -print) ; do
    /bin/echo -e -n "$dirname\t"
    find $dirname -type f -print | wc -l
done
7
ответ дан 1 December 2019 в 13:05

Python уже имеет соответствующие утилиты для такого задания, встроенного. Как острота это было бы сделано как так:

$ python -u -c 'from os import walk,path; print "\n".join([str(len(f)) +" "+r for r,d,f in walk(".")])'

Или как сценарий как так:

#!/usr/bin/env python
import os
import sys
for root,dirs,files in os.walk(sys.argv[1]):
    print(root,len(files))

Заметьте, что в версии сценария Вы предназначены для вызова сценария с каталогом как позиционный параметр:

$ ./count_files.py my_dir/
4
ответ дан 1 December 2019 в 13:05

В чистом bash:

for dir in /data/*/; do
    files=( "$dir"/*/* )
    printf "%s\t%s\n" "$dir:" "${#files[@]}"
done

Вывод был бы чем-то как:

/data/test:     5432
/data/train:    1234
0
ответ дан 1 December 2019 в 13:05

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

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