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
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:
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
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/
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
Tags command-line find files