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:
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
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/
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