Quiero contar el número de archivos para cada extensión en un directorio, así como los archivos sin extensión.
He probado algunas opciones, pero todavía no he encontrado una solución que funcione:
find "$folder" -type f | sed 's/.*\.//' | sort | uniq -c
es una opción pero no funciona si no hay extensión de archivo. Necesito saber cuántos archivos no tienen una extensión.También probé un bucle de búsqueda en una matriz y luego sumé los resultados, pero en este momento ese código arroja un error variable no declarado, pero solo fuera del bucle:
declare -a arr arr=() echo ${arr[@]}
Esto arroja una variable no declarada, así como una vez que se completa el ciclo de búsqueda.
command-line
find
extension
niño tractor
fuente
fuente
ext = [ f.split('.')[-1] for f in os.listdir('./') ]
Thatll hacerla par de líneas más cortas y quizás más PythonicSi tienes GNU awk, podrías hacer algo como
es decir, construir / incrementar una matriz asociativa tecleada en el último
.
campo separado, o alguna cadena fija arbitraria, como(none)
si no hubiera extensión.mawk
no parece permitir un separador de registro de byte nulo; podría usarlomawk
con el separador de línea nueva predeterminado si está seguro de que no necesita tratar con líneas nuevas en los nombres de sus archivos:fuente
Con la tarea básica
/bin/sh
o inclusobash
puede ser un poco difícil, pero como puede ver en otras respuestas, las herramientas que pueden trabajar en datos agregados pueden manejar esa tarea particularmente fácil. Una de esas herramientas sería lasqlite
base de datos.El proceso muy simple para usar la
sqlite
base de datos sería crear un.csv
archivo con dos campos: nombre de archivo y extensión. Más tardesqlite
se puede utilizar la instrucción simple agregadoCOUNT()
deGROUP BY ext
llevar a cabo el recuento de archivos basado en campo de extensiónfuente
files_tb
¿Creo que se hace referencia a la tabla pero las columnas de la tabla no están definidas en ningún lugar que pueda ver?printf
. Y SQLite usará de forma predeterminada el tratamiento de la primera línea del archivo csv como nombres de columna.Usando PowerShell si esa es una opción:
o más corto, usando alias:
fuente