Tengo un directorio con muchas fotos. Específicamente, du -sh --apparent-size /path/to/myfolderme da 331G. Lo cual es genial. Pero ahora quiero obtener una lista agrupada por mes, por ejemplo, algo como esto:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
¿Hay una manera (razonable) de hacer esto con linux builtins, o debería escribir mi propia utilidad Python para hacerlo?
shell
files
disk-usage
Wayne Werner
fuente
fuente

Respuestas:
En Linux, intente:
Cómo funciona
find /my/pathEsto busca archivos en / my / path.
-maxdepth 1Esto le dice que
findno busque en subdirectorios. (Si desea una búsqueda recursiva, omita esta opción).-type fEsto le indica
findque limite la búsqueda a archivos normales.-printf '%TY-%Tm %s\n'Esto le indica
findque imprima año-mes seguido del tamaño en bytes para cada archivo.Como no los usamos, los nombres de los archivos encontrados no se imprimen.
b[$1]+=$2Para cada archivo encontrado, agregamos su recuento de bytes, encontrado en la columna 2, al recuento de esa combinación año-mes en una matriz asociativa
b.END{for (date in b) print date, b[date]}Después de haber procesado toda la salida
find, imprimimos los resultados.sortEsto ordena los resultados en orden de fecha.
Versión de línea múltiple
Para aquellos que prefieren su código distribuido en varias líneas:
Ejemplo
Consideremos un directorio con estos archivos:
El resultado de nuestro comando es:
Refinamientos
Si queremos la salida en mebibytes (MiB) en lugar de bytes, podemos convertir las unidades de esta manera:
Podemos obtener aún más control sobre el formato de salida mediante el uso
printf. Aquí, para mantener solo un dígito después del punto decimal, formateamos el tamaño con%5.1f:fuente
printf "%s %9d\n", date, b[date]lugar deprint date, b[date]agregar relleno de espacio a la segunda columnaprintf.findque apoya-maxdepthque probablemente tenga[g]awkque soportesPROC_INFO["sorted_in"]="@ind_str_asc"