Hice un raspado de sitio web para un proyecto de conversión. Me gustaría hacer algunas estadísticas sobre los tipos de archivos allí, por ejemplo, 400 .htmlarchivos, 100 .gif, etc. ¿Cuál es una manera fácil de hacer esto? Tiene que ser recursivo.
Editar: con el script que publicó maxschelpzig, tengo algunos problemas debido a la arquitectura del sitio que he eliminado. Algunos de los archivos son del nombre *.php?blah=blah&foo=barcon varios argumentos, por lo que los cuenta a todos como únicos. Por lo tanto, la solución debe considerarse *.php*del mismo tipo, por así decirlo.

*.php?blah=blah&foo=barcon varios argumentos, por lo que los cuenta a todos como únicos. ¿Cómo puedo modificarlo para buscarlo*.php*?sed 's/^.*\(\.[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]\).*$/\1/'find -name '.*' -prune -o -type f -printevalúa como: si la entrada del directorio coincide.*, podarla; de lo contrario, si es un archivo, imprimirlo. Como.*también coincide., es decir, el CWD, todo se poda, es decir, find ni siquiera desciende al primer directorio. Tal vez, las versiones de 2 años de edad sefindcomportaron de manera diferente, o era solo un descuido de mí, en aquel entonces. De todos modos,find -name '.*' -not -name . -prune -o -type f -printarregla esto.Con zsh:
El patrón
**/?*.*coincide con todos los archivos que tienen una extensión, en el directorio actual y sus subdirectorios de forma recursiva. El calificador globalDpermitezshrecorrer incluso directorios ocultos y considerar archivos ocultos,.selecciona solo archivos normales. El modificador de historial conserva solo la extensión del archivo.print -rlimprime una coincidencia por línea.uniq -ccuenta elementos idénticos consecutivos (el resultado global ya está ordenado). La última llamada parasortordenar las extensiones por conteo de uso.fuente
Este one-liner parece ser un método bastante robusto:
Los
find . -type f -printf '%f\n'grabados el nombre base de cada archivo normal en el árbol, sin directorios. Eso elimina tener que preocuparse por los directorios que pueden tener.en ellos en susedexpresión regular.El
sed -r -n 's/.+(\..*)$/\1/p'reemplaza el nombre de archivo entrante con solo su extensión. Por ejemplo, se.somefile.extconvierte.ext. Tenga.+en cuenta la inicial en la expresión regular; Esto hace que cualquier coincidencia necesite al menos un carácter antes de la extensión.. Esto evita que los nombres de archivo.gitignoresean tratados como sin nombre y con la extensión '.gitignore', que es probablemente lo que desea. Si no, reemplace el.+con a.*.El resto de la línea es de la respuesta aceptada.
Editar : si desea un histograma bien ordenado en formato de gráfico de Pareto , simplemente agregue otro
sortal final:Salida de muestra de un árbol fuente Linux construido:
fuente
Puse un script bash en mi
~/bincarpeta llamadaexhistcon este contenido:En cualquier directorio en el que me encuentre, simplemente escribo 'exh', la pestaña lo completa automáticamente y veo algo como esto:
PS Recortar la parte después del signo de interrogación debería ser simple de hacer con otro comando sed probablemente después del último (no lo he probado):
sed 's/\?.*//'fuente