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

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.

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.