154 votes

Comment compter le nombre de fichiers dans chaque répertoire ?

Je suis capable de lister tous les répertoires par

find ./ -type d

J'ai essayé de lister le contenu de chaque répertoire et de compter le nombre de fichiers dans chaque répertoire en utilisant la commande suivante

find ./ -type d | xargs ls -l | wc -l

Mais cela additionne le nombre total de lignes retournées par

find ./ -type d | xargs ls -l

Y a-t-il un moyen de compter le nombre de fichiers dans chaque répertoire ?

2voto

Joseph Earnest Points 21

Cela pourrait être un autre moyen de parcourir les structures de répertoire et de fournir des résultats approfondis.

find . -type d  | awk '{print "echo -n \""$0"  \";ls -l "$0" | grep -v total | wc -l" }' | sh

2voto

André Fachat Points 27

Ma réponse est un peu différente. Grâce aux possibilités de trouver, vous pouvez en fait être beaucoup plus flexible. Essayez juste :

find . -type f -printf "%h\n" | sort | uniq -c

Avec l'option "%h" de "-printf", find n'imprime que le répertoire des fichiers qu'il a trouvés. Ensuite, triez et comptez avec "uniq -c". Cela imprime le nombre d'entrées de résultats de recherche avec le même répertoire, par répertoire.

En utilisant les autres options proposées, vous pouvez être beaucoup plus flexible. Par exemple, pour obtenir une vue d'ensemble du nombre de fichiers dans un répertoire qui ont été modifiés à une certaine date, utilisez :

find . -newermt "2022-01-01 00:00:00" -type f -printf "%TY-%Tm-%Td %h\n" | sort | uniq -c

Cela trouve tous les fichiers qui ont été modifiés depuis 1. janvier 2022, imprime (avec "-printf") la date de modification et le répertoire, puis les trie et les compte. Dans cet exemple, chaque ligne du résultat contient le nombre de fichiers, la date de modification (sans l'heure) et le répertoire.

Notez que "-printf" n'est peut-être pas disponible dans toutes les versions de find, je pense.

1voto

Giddy Points 11

Trouver . -type f -printf '%h \n | trier | uniq -c

donne par exemple :

  5 .
  4 ./aln
  5 ./aln/iq
  4 ./bs
  4 ./ft
  6 ./hot

1voto

sthames42 Points 21

J'ai essayé avec certaines des autres solutions proposées ici, mais je me suis retrouvé avec des sous-dossiers inclus dans le nombre de fichiers alors que je ne voulais que les fichiers. Ceci imprime ./folder/path<tab>nnn avec le nombre de fichiers, sans compter les sous-dossiers, pour chaque sous-dossier du dossier actuel.

for d in `find . -type d -print` 
do 
  echo -e "$d\t$(find $d -maxdepth 1 -type f -print | wc -l)"
done

0voto

Vous obtiendrez ainsi le décompte global.

for file in */; do echo "$file -> $(ls $file | wc -l)"; done | cut -d ' ' -f 3| py --ji -l 'numpy.sum(l)'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X