Tengo un directorio con muchas fotos. Específicamente, du -sh --apparent-size /path/to/myfolder
me 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/path
Esto busca archivos en / my / path.
-maxdepth 1
Esto le dice que
find
no busque en subdirectorios. (Si desea una búsqueda recursiva, omita esta opción).-type f
Esto le indica
find
que limite la búsqueda a archivos normales.-printf '%TY-%Tm %s\n'
Esto le indica
find
que 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]+=$2
Para 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.sort
Esto 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
.find
que apoya-maxdepth
que probablemente tenga[g]awk
que soportesPROC_INFO["sorted_in"]="@ind_str_asc"