31 votes

Nombre de fichiers dans chaque sous-répertoire

Je voudrais une commande BASH pour lister seulement le nombre de fichiers dans chaque sous-répertoire d'un répertoire.

Par exemple, dans le répertoire /tmp il y a dir1 , dir2 , ... J'aimerais voir :

`dir1` : x files 
`dir2` : x files ...

45voto

galeksic Points 121

En supposant que vous souhaitez un comptage récursif des fichiers uniquement, et non des répertoires et autres types, quelque chose comme ceci devrait fonctionner :

find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
  printf "%-25.25s : " "$dir"
  find "$dir" -type f | wc -l
done

19voto

cemregr Points 386

Cette tâche m'a tellement fasciné que j'ai voulu trouver moi-même une solution. Il n'y a même pas besoin de boucle while et de MAI être plus rapide en vitesse d'exécution. Inutile de dire que les efforts de Thor m'ont beaucoup aidé à comprendre les choses en détail.

Alors voici le mien :

find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "{} : $(find "{}" -type f | wc -l)" file\(s\)' \;

Il a l'air modeste pour une raison, car il est bien plus puissant qu'il n'y paraît. :-)

Toutefois, si vous avez l'intention de l'inclure dans votre .bash_aliases il doit ressembler à ceci :

alias somealias='find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '\''echo "{} : $(find "{}" -type f | wc -l)" file\(s\)'\'' \;'

Notez la gestion très délicate de l'imbrication des simple citations. Et non, c'est pas Il est possible d'utiliser des guillemets doubles pour les sh -c argument.

13voto

nothx Points 131
find . -type f | cut -d"/" -f2 | uniq -c

Liste les dossiers et les fichiers dans le dossier actuel avec un compte des fichiers trouvés en dessous. Rapide et utile OMI. (les fichiers sont affichés avec le compte 1).

2voto

Christian Wolf Points 285

L'utilisation de find est définitivement la meilleure solution si vous voulez compter récursivement, mais si vous voulez juste compter les fichiers directement sous un certain répertoire :

ls dir1 | wc -l

1voto

Teddy Katayama Points 11
find . -mindepth 1 -type d -print0 | xargs -0 -I{} sh -c 'printf "%4d : %s\n" "$(find {} -type f | wc -l)" "{}"'

J'ai souvent besoin de compter le nombre de fichiers dans mes sous-répertoires et j'utilise cette commande. Je préfère que le compte apparaisse en premier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X