Eu tenho um diretório com muitas fotos nele. Especificamente, du -sh --apparent-size /path/to/myfolder
me dá 331G. O que é ótimo. Mas agora eu quero obter uma listagem agrupada por mês, por exemplo, algo como isto:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
Existe uma maneira (razoável) de fazer isso com os linux builtins, ou devo apenas escrever meu próprio utilitário Python para fazer isso?
shell
files
disk-usage
Wayne Werner
fonte
fonte
Respostas:
No Linux, tente:
Como funciona
find /my/path
Isso procura por arquivos em / my / path.
-maxdepth 1
Isso diz
find
para não procurar subdiretórios. (Se você deseja uma pesquisa recursiva, omita essa opção.)-type f
Isso diz
find
para limitar a pesquisa a arquivos regulares.-printf '%TY-%Tm %s\n'
Isto indica
find
para imprimir o ano-mês seguido pelo tamanho em bytes para cada arquivo.Como não temos utilidade para eles, os nomes dos arquivos encontrados não são impressos.
b[$1]+=$2
Para cada arquivo encontrado, adicionamos sua contagem de bytes, encontrada na coluna 2, à contagem daquela combinação ano-mês na matriz associativa
b
.END{for (date in b) print date, b[date]}
Depois de processarmos toda a saída
find
, imprimimos os resultados.sort
Isso classifica os resultados em ordem de data.
Versão de várias linhas
Para aqueles que preferem seu código espalhado por várias linhas:
Exemplo
Vamos considerar um diretório com esses arquivos:
A saída do nosso comando é:
Refinamentos
Se queremos a saída em mebibytes (MiB) em vez de bytes, podemos converter as unidades assim:
Podemos obter ainda mais controle sobre o formato de saída usando
printf
. Aqui, para manter apenas um dígito após o ponto decimal, formata-se o tamanho com%5.1f
:fonte
printf "%s %9d\n", date, b[date]
em vez deprint date, b[date]
adicionar preenchimento de espaço para a segunda colunaprintf
.find
que suporta-maxdepth
você provavelmente tem[g]awk
que suportesPROC_INFO["sorted_in"]="@ind_str_asc"