J'ai créé un site Web pour un projet de conversion. J'aimerais faire quelques statistiques sur les types de fichiers qu'il contient - par exemple, 400 .html
, 100 .gif
, etc. Quel est le moyen le plus simple de procéder? Il faut que ce soit récursif.
Edit: Avec le script que maxschelpzig a posté, je rencontre quelques problèmes en raison de l'architecture du site que j'ai effacé. Certains des fichiers portent des noms *.php?blah=blah&foo=bar
avec des arguments différents, ils sont donc tous considérés comme uniques. La solution doit donc être considérée comme *.php*
étant du même type, pour ainsi dire.
*.php?blah=blah&foo=bar
avec des arguments différents, ils sont donc tous considérés comme uniques. Comment puis-je le modifier pour chercher*.php*
?sed 's/^.*\(\.[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]\).*$/\1/'
find -name '.*' -prune -o -type f -print
évaluée comme suit : si l'entrée du répertoire correspond,.*
alors l'élaguer, sinon s'il s'agit d'un fichier, imprimez-le. Comme les.*
correspondances.
, c’est-à-dire le CWD, tout est élagué, c’est-à-dire que find ne descend même pas dans le premier répertoire. Peut-être que les versions de 2 ans defind
se comportaient différemment - ou que c'était juste un oubli de moi à l'époque. Quoi qu'il en soit,find -name '.*' -not -name . -prune -o -type f -print
corrige cela.Avec zsh:
Le modèle
**/?*.*
correspond à tous les fichiers ayant une extension, dans le répertoire en cours et ses sous-répertoires de manière récursive. Le qualificatif globD
laissezsh
parcourir les répertoires même cachés et considère les fichiers cachés,.
ne sélectionne que les fichiers normaux. Le modificateur d'historique ne conserve que l'extension de fichier.print -rl
imprime une correspondance par ligne.uniq -c
compte les éléments identiques consécutifs (le résultat global est déjà trié). Le dernier appel poursort
trier les extensions par nombre d'utilisations.la source
Ce one-liner semble être une méthode assez robuste:
Les
find . -type f -printf '%f\n'
impressions du BaseName de chaque fichier régulier dans l'arborescence, sans répertoires. Cela vous évite d'avoir à vous soucier des répertoires qui pourraient s'y trouver.
dans votresed
regex.Le
sed -r -n 's/.+(\..*)$/\1/p'
remplace le nom de fichier entrant par uniquement son extension. Par exemple,.somefile.ext
devient.ext
. Notez l'initiale.+
dans la regex; il en résulte que toute correspondance nécessitant au moins un caractère avant l'extension.
. Cela évite que les noms de fichiers comme.gitignore
étant sans nom et l'extension '.gitignore', ce que vous voulez probablement. Sinon, remplacez le.+
par un.*
.Le reste de la ligne provient de la réponse acceptée.
Edit : Si vous voulez un histogramme bien trié au format graphique de Pareto , ajoutez-en un autre
sort
à la fin:Exemple de sortie d'une arborescence source Linux construite:
la source
J'ai mis un script bash dans mon
~/bin
dossier appeléexhist
avec ce contenu:Quel que soit le répertoire dans lequel je me trouve, je tape simplement «exh», l'onglet le complète automatiquement et je vois à peu près ceci:
PS Couper la partie après le point d'interrogation devrait être simple à faire avec une autre commande sed probablement après la dernière (je ne l'ai pas essayée):
sed 's/\?.*//'
la source