web-dev-qa-db-fra.com

Comment compter le nombre total de fichiers dans tous les sous-répertoires?

j'ai un répertoire appelé /data/ qui contient deux sous-répertoires: /data/train/ et /data/test/. train et test contiennent chacun 101 sous-répertoires (101 répertoires dans train et 101 dans test).

Ces répertoires contiennent des images JPEG. Je veux parcourir tous les répertoires pour:

  1. Compter le nombre total d'images
  2. Compter le nombre d'images contenues dans chaque répertoire
3
Joseph

Lisez man find et faites quelque chose comme

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
waltinator

Python a déjà des utilitaires appropriés pour ce type de travail. En une ligne, cela se ferait comme suit:

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

Ou comme script en tant que tel:

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

Notez que dans la version de script, vous devez appeler un script avec le répertoire comme paramètre de position:

$ ./count_files.py my_dir/
4

En pure bash:

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

La sortie serait quelque chose comme:

/data/test:     5432
/data/train:    1234
0
αғsнιη