Script shell permettant de trouver tous les types de fichiers dans un répertoire avec leur nombre

7

Je veux écrire un shell script ou alias pour trouver le nombre de types de fichiers différents dans un répertoire. Par exemple, un exemple de sortie de script doit être:

*.h      20
*.c      40
*.cpp    10
Makefile 3
manav m-n
la source

Réponses:

8
find . -type f -name '*.*' -exec sh -c 'echo ${0##*.}' {} \; | sort | uniq -c | sort -nr

le echo ${0##*.} vous donne l'extension du fichier. Nous canalisons la sortie vers sort puis compter les lignes uniques avec uniq.

Quelques ajouts:

  • Depuis la sortie de uniq n'est pas trié en fonction du nombre d'occurrences, vous devrez rediffuser un tri numérique ( -nr ) si vous voulez le trier.
  • Si vous souhaitez rechercher uniquement dans votre répertoire actuel, ajoutez -maxdepth 1 à ton find commander.
  • Pipe dans awk '{print $2, $1}' pour montrer le compte après les extensions.
slhck
la source
Bonne réponse. Cela n'inclut pas les fichiers sans extensions. Y a-t-il un moyen simple de trouver cela?
jaychris
le -name '*.*' l'option restreint find aux fichiers avec des extensions seulement. Si vous laissez cela de côté, vous obtiendrez un nombre de 1 pour chaque fichier, ce qui risque de ne pas être idéal.
slhck
Vous pouvez ajouter une branche dans le sh pour vérifier si elle a une extension, si print print, sinon print full filename; et trouve *
Clayton Stanley
@ClaytonStanley Depuis l'extra sh processus prend un peu plus de temps d'exécution, filtrant les résultats avec find sera un peu plus rapide, je suppose.
slhck