Как посчитать общее количество файлов во всех подкаталогах?
У меня есть каталог под названием /data/
который содержит две подкаталоги: /data/train/
а также /data/test/
, train
а также test
каждый содержит 101 подкаталога (101 каталог в train
и 101 в test
).
Эти каталоги содержат изображения в формате JPEG. Я хочу перебрать все каталоги, чтобы:
- Подсчитайте общее количество изображений
- Подсчитайте количество изображений, содержащихся в каждом каталоге
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
В 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/
В чистом виде bash
:
for dir in /data/*/; do
files=( "$dir"/*/* )
printf "%s\t%s\n" "$dir:" "${#files[@]}"
done
Вывод будет что-то вроде:
/data/test: 5432
/data/train: 1234