Calcular tamanho de arquivos com FIND e DU

1. Calcular tamanho de arquivos com FIND e DU

Ataide Momberg Domingues Junior
ataidedomingues

(usa Outra)

Enviado em 10/12/2019 - 14:18h

Boa Tarde
Pessoal poderiam me ajudar, estou tentando fazer um levantamento no meu servidor de arquivos utilizados no período de um ano, porem eu preciso somar o tamanho de todos esses arquivos pra ver qual volumetria apenas desses arquivos e não do diretório todo.
Já tentei algumas opções porem sem sucesso se alguém tiver uma ideia diferente agradeço.
# find . -maxdepth 1 -atime -360 -exec du -lh {} \;

Obrigado pessoal


  


2. Re: Calcular tamanho de arquivos com FIND e DU

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 10/12/2019 - 14:37h


ataidedomingues escreveu:

Boa Tarde
Pessoal poderiam me ajudar, estou tentando fazer um levantamento no meu servidor de arquivos utilizados no período de um ano, porem eu preciso somar o tamanho de todos esses arquivos pra ver qual volumetria apenas desses arquivos e não do diretório todo.
Já tentei algumas opções porem sem sucesso se alguém tiver uma ideia diferente agradeço.
# find . -maxdepth 1 -atime -360 -exec du -lh {} \;

Obrigado pessoal


find . -maxdepth 1 -atime -360 -exec du -hs {} \; 


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




3. Re: Calcular tamanho de arquivos com FIND e DU

augusto
marimbondo

(usa Outra)

Enviado em 10/12/2019 - 14:57h

Você precisa de uma lista de arquivos. Use o Ls, não use nem o Find nem o Du.
O Du é para ver tamanho de diretórios. O Ls é recomendado para ver o tamanho dos arquivos.

Primeramente, " arquivos utilizados no período de um ano" é muito vago. O que você quer dizer com utilizados?
O ext4 guarda várias informações de acesso, como a hora da criação do arquivo, leitura e da sua modificação...

No ls, temos o formato de lista longa -l, e com essa opção podemos adicionar ( veja man ls ):
-t      sort by modification time, newest first
-u show access time and sort by name


Então você pode usar alguma coisa do tipo:

$ ls -l -t -R  . 


-l é a opção de listas longas (detalhadas), o -t vai arrumar por hora de modificação, o -R é para ser recursivo.
Ainda, você pode adicionar a opção --full-time que coloca horário em formato mais preciso...

Depois, é só você brincar com o grep para filtrar, ou com o comando sort, opções organizar pela 3a coluna, como opção -k etc, e o comando cut -f e tal.

Acho que você pode precisar do comando cut -f tal coluna e depois somar os valores obtidos.

Ainda, se você souber um pouco de globbing do Bash, pode usar construções como

 $ ls -lt  --full-time **/*.txt 


Exemplo:
Calcular tamanho, em "bytes", dos arquivos com hora de modificação em 2019:

$ ls -l -R -t  --full-time . | grep '2019' | sed 's/\s\s*/ /g' | cut -d' ' -f5 | paste -sd+ | bc 


Outro exemplo, listar/calc tamanhos de todos os arquivos com extensão .txt modificados em 2019. Para isso, você deve ativar uma opção do Bash antes para ampliar o globbing e funcionar:

$ shopt -s globstar
$ ls -l -t --full-time **/*.txt | grep '2019' | sed 's/\s\s*/ /g' | cut -d' ' -f5 | paste -sd+ | bc


The du Command – Check Disk Usage on the Command Line
https://www.putorius.net/linux-du-command.html

Ref para o sort :
https://unix.stackexchange.com/questions/104525/sort-based-on-the-third-column



4. Re: Calcular tamanho de arquivos com FIND e DU

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/12/2019 - 16:14h

ataidedomingues escreveu:

Boa Tarde
Pessoal poderiam me ajudar, estou tentando fazer um levantamento no meu servidor de arquivos utilizados no período de um ano, porem eu preciso somar o tamanho de todos esses arquivos pra ver qual volumetria apenas desses arquivos e não do diretório todo.
Já tentei algumas opções porem sem sucesso se alguém tiver uma ideia diferente agradeço.
# find . -maxdepth 1 -atime -360 -exec du -lh {} \;

Obrigado pessoal

Boa tarde Ataíde.
Segue sugestão:
ls -l --full-time|awk '/2018/ {x+=$5}END{print "Total: " x }'
Total: 82440885

OBS.: O comando foi executado no Diretório, onde quero o tamanho dos arquivos.
Podem ser usadas as variações do "ls", R para recursivo, *.txt, etc
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


5. Re: Calcular tamanho de arquivos com FIND e DU

Ataide Momberg Domingues Junior
ataidedomingues

(usa Outra)

Enviado em 10/12/2019 - 18:09h

marimbondo escreveu:

Você precisa de uma lista de arquivos. Use o Ls, não use nem o Find nem o Du.
O Du é para ver tamanho de diretórios. O Ls é recomendado para ver o tamanho dos arquivos.

Primeramente, " arquivos utilizados no período de um ano" é muito vago. O que você quer dizer com utilizados?
O ext4 guarda várias informações de acesso, como a hora da criação do arquivo, leitura e da sua modificação...

No ls, temos o formato de lista longa -l, e com essa opção podemos adicionar ( veja man ls ):
-t      sort by modification time, newest first
-u show access time and sort by name


Então você pode usar alguma coisa do tipo:

$ ls -l -t -R  . 


-l é a opção de listas longas (detalhadas), o -t vai arrumar por hora de modificação, o -R é para ser recursivo.
Ainda, você pode adicionar a opção --full-time que coloca horário em formato mais preciso...

Depois, é só você brincar com o grep para filtrar, ou com o comando sort, opções organizar pela 3a coluna, como opção -k etc, e o comando cut -f e tal.

Acho que você pode precisar do comando cut -f tal coluna e depois somar os valores obtidos.

Ainda, se você souber um pouco de globbing do Bash, pode usar construções como

 $ ls -lt  --full-time **/*.txt 


Exemplo:
Calcular tamanho, em "bytes", dos arquivos com hora de modificação em 2019:

$ ls -l -R -t  --full-time . | grep '2019' | sed 's/\s\s*/ /g' | cut -d' ' -f5 | paste -sd+ | bc 


Outro exemplo, listar/calc tamanhos de todos os arquivos com extensão .txt modificados em 2019. Para isso, você deve ativar uma opção do Bash antes para ampliar o globbing e funcionar:

$ shopt -s globstar
$ ls -l -t --full-time **/*.txt | grep '2019' | sed 's/\s\s*/ /g' | cut -d' ' -f5 | paste -sd+ | bc


The du Command – Check Disk Usage on the Command Line
https://www.putorius.net/linux-du-command.html

Ref para o sort :
https://unix.stackexchange.com/questions/104525/sort-based-on-the-third-column


Obrigado pelo retorno marimbondo , mas na verdade tenho um servidor de arquivo muito grande a ideia e migra apenas os dados acessados e modificado de um ano pra tras, por isso preciso ver qual volumetria apenas desses arquivos no caso .
Não sei se deu pra entender a ideia.



6. Re: Calcular tamanho de arquivos com FIND e DU

Ataide Momberg Domingues Junior
ataidedomingues

(usa Outra)

Enviado em 10/12/2019 - 18:12h

msoliver escreveu:

ataidedomingues escreveu:

Boa Tarde
Pessoal poderiam me ajudar, estou tentando fazer um levantamento no meu servidor de arquivos utilizados no período de um ano, porem eu preciso somar o tamanho de todos esses arquivos pra ver qual volumetria apenas desses arquivos e não do diretório todo.
Já tentei algumas opções porem sem sucesso se alguém tiver uma ideia diferente agradeço.
# find . -maxdepth 1 -atime -360 -exec du -lh {} \;

Obrigado pessoal

Boa tarde Ataíde.
Segue sugestão:
ls -l --full-time|awk '/2018/ {x+=$5}END{print "Total: " x }'
Total: 82440885

OBS.: O comando foi executado no Diretório, onde quero o tamanho dos arquivos.
Podem ser usadas as variações do "ls", R para recursivo, *.txt, etc
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


Obrigado msoliver, vou testar.
Abraço


7. Re: Calcular tamanho de arquivos com FIND e DU

augusto
marimbondo

(usa Outra)

Enviado em 11/12/2019 - 08:52h

Juntando a resposta do msoliver e uns artigos que achei, deu essa linha:

[host xyz]# cd /etc
[host etc]# ls -l --time-style=+%Y **/.* | awk '{a[$6] += $5} END{for (i in a) print i, a[i]}'
0
1969 4096
2017 4536743
2018 1111704
2019 104075466


Um array associativo do awk produzir uma lista com o ano e em seguida a soma, em bytes, dos arquivos daquele ano...

Basicamente, vamos precisar da função do globstar do Bash para produzir uma listagem do Ls sem os agrupamentos por pastas (para o awk depois não se confundir), e de forma recursiva ir descendo os diretórios... Se não for recursivo, é mais fácil e não precisa do globstar, só ajustar o Ls.

Dependendo da pasta que você for rodar, pode aparecer umas entradas aleatórias, mas você irá perceber que são poucos arquivos que escapam o array associativo do awk... Também, se der errors de acesso/leitura, pode opcionalmente adicionar um '2>/dev/null' antes do pipe para o awk, mas isso não afeta a contagem/soma do array.

Só _não_ pode rodar esse comando direto no diretório / !! Tem que escolher as pastas...

https://unix.stackexchange.com/questions/242946/using-awk-to-sum-the-values-of-a-column-based-on-the...
https://superuser.com/questions/929471/bash-ls-without-folder-grouping


8. Re: Calcular tamanho de arquivos com FIND e DU [ Resolvido ]

Ataide Momberg Domingues Junior
ataidejunior

(usa Debian)

Enviado em 27/12/2019 - 19:29h

marimbondo escreveu:

Juntando a resposta do msoliver e uns artigos que achei, deu essa linha:

[host xyz]# cd /etc
[host etc]# ls -l --time-style=+%Y **/.* | awk '{a[$6] += $5} END{for (i in a) print i, a[i]}'
0
1969 4096
2017 4536743
2018 1111704
2019 104075466


Um array associativo do awk produzir uma lista com o ano e em seguida a soma, em bytes, dos arquivos daquele ano...

Basicamente, vamos precisar da função do globstar do Bash para produzir uma listagem do Ls sem os agrupamentos por pastas (para o awk depois não se confundir), e de forma recursiva ir descendo os diretórios... Se não for recursivo, é mais fácil e não precisa do globstar, só ajustar o Ls.

Dependendo da pasta que você for rodar, pode aparecer umas entradas aleatórias, mas você irá perceber que são poucos arquivos que escapam o array associativo do awk... Também, se der errors de acesso/leitura, pode opcionalmente adicionar um '2>/dev/null' antes do pipe para o awk, mas isso não afeta a contagem/soma do array.

Só _não_ pode rodar esse comando direto no diretório / !! Tem que escolher as pastas...

https://unix.stackexchange.com/questions/242946/using-awk-to-sum-the-values-of-a-column-based-on-the...
https://superuser.com/questions/929471/bash-ls-without-folder-grouping


Obrigado Pessoal pela Ajuda.
Agradeço a todos, Abraço








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts