Como contar o número total de arquivos em todos os subdiretórios?

3

Eu tenho um diretório chamado /data/ que contém dois subdiretórios: /data/train/ e /data/test/ . train e test contêm cada um 101 subdiretórios (101 diretórios em train e 101 em test ).

Esses diretórios contêm imagens jpeg. Eu quero percorrer todos os diretórios para:

  1. Conte o número total de imagens
  2. Conte o número de imagens contidas em cada diretório
por Joseph 26.10.2017 / 18:34

3 respostas

7

Leia man find e faça algo como

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
    
por waltinator 26.10.2017 / 18:41
4

O Python tem utilitários apropriados para esse trabalho já incorporado. Como one-liner isso seria feito assim:

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

Ou como script:

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

Observe que na versão do script você deve chamar script com diretório como parâmetro posicional:

$ ./count_files.py my_dir/
    
por Sergiy Kolodyazhnyy 26.10.2017 / 19:09
0

Em bash puro:

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

A saída seria algo como:

/data/test:     5432
/data/train:    1234
    
por αғsнιη 26.10.2017 / 21:28