Tamanho de Pasta sem o DU [RESOLVIDO]

1. Tamanho de Pasta sem o DU [RESOLVIDO]

Rodolfo Rodrigues
rodiguez

(usa Outra)

Enviado em 27/02/2012 - 10:15h

Bom Dia

Tenho uma duvida cruel que está me matando
estou a 2 dias mexendo nesse scritp sem sucesso

Seguinte,

Possuo 3 diretórios

Dir1
Dir2
Dir3

Dentro de Cada diretório, possui 5 pastas com o mesmo nome!

Dir1 - Pasta1/Pasta2/Pasta3/Pasta4/Pasta5
Dir2 - Pasta1/Pasta2/Pasta3/Pasta4/Pasta5
Dir3 - Pasta1/Pasta2/Pasta3/Pasta4/Pasta5

Essas pastas contem diversos arquivos de diversos tamanhos..

Preciso Listar Pastas com o mesmo nome, e seu tamanho

Exemplo

Pasta1 - 152 kb
Pasta2 - 124 kb
...


Dir1 - 12365 kb
Dir2 - 1452 kb
Dir3 - 14523 kb


Elaborei algo que lista os valores da pasta
mas não soma pastas do mesmo nome, e não dividem por "grupos"

DIR=/root
for x in `ls -v $DIR/arch* | sort -u | grep -iv archive`;
do
echo "INICIO $x" ; ls -lk $DIR/arch*/$x | grep -vw total | egrep -v "archive[0-9]"; echo "FIM $x" ;

for y in `ls -v $DIR/arch* | sort -u | grep -iv archive`;

do

echo "INICIO $x" ; ls -lk $DIR/arch*/$x | grep -vw total | awk '{print $5}' | egrep -v "archive[0-9]"; echo "FIM $x" ;


done

done


Alguem poderia me ajudar

obs. Não posso utilizar o "DU" pois mais tarde vou trabalhar com datas e ele vai me atrapalhar.

Obrigado Atecipadamente.


  


2. Re: Tamanho de Pasta sem o DU [RESOLVIDO]

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 27/02/2012 - 11:16h

Acho que nesse caso o ideal é usar hashes. As versões
mais novas do bash (>= 4) suportam esse tipo de array.

Eu fiz assim:



#!/bin/bash
# obs: deve ser bash --version > 4

# declara um hash
declare -A hashao

for PASTA in dir{1,2,3}/*
do
# tamanho da pasta em k bytes
SIZE=$(ls -lkd $PASTA | awk '{print $5'})
# nome da pasta
BASENAME=$(basename $PASTA)
# var temporaria para simplificar
# a expressao abaixo
TEMP=${hash["$BASENAME"]}
# atualiza o valor no hash
hashao["$BASENAME"]=$(($TEMP + $SIZE))
done

# percorre o hash
for CHAVE in ${!hashao[@]}; do echo "$CHAVE : ${hashao["$CHAVE"]}"; done


Cada chave do hash é um nome de diretório e o valor é o tamanho desse diretório. Se um nome (chave) aparecer mais de uma vez, o novo valor será a soma do valor antigo com o novo tamanho.

Acho que é isso. t+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts