Resposta `a pergunta 1 da frequencia. :::::::::::::: 1a1 :::::::::::::: #!/bin/sh #Solucao so' com uma pipe. Tem o inconveniente de nao contar com #o espaco gasto por directorios. ls -lFsR $1 | egrep -v '(total|/|^$)' | awk -f awk1 | awk '{print 100 - (100 * $2) / ($1 * 1024)}' :::::::::::::: 1a2 :::::::::::::: #!/bin/sh #esta versao 1 tem o mesmo problema da anterior echo versao 1 find ${1-.} -type f -exec ls -ls {} ';' | awk -f awk1 | awk '{print 100 - (100 * $2) / ($1 * 1024)}' #mas e' facil de contornar echo versao 2 set `find ${1-.} -type f -exec ls -ls {} ';' | awk -f awk1` blocos=$1 bytes=$2 echo $blocos $bytes set `find ${1-.} -type d -exec ls -lsd {} ';' | awk -f awk1` blocos=`expr $blocos + $1` echo $blocos $bytes echo $blocos $bytes | awk '{print 100 - (100 * $2) / ($1 * 1024)}' :::::::::::::: awk1 :::::::::::::: {bytes += $6; blocos += $1} END {print blocos, bytes} :::::::::::::: 1b :::::::::::::: #!/bin/sh #solucao da alinea b. So' corre em shells que aceitem funcoes. espaco_r() { cd $1 bytes=0 set `ls -s .` blocos=$1 for i in * do if [ -d $i ] then set `espaco_r $i` blocos=`expr $blocos + $1` bytes=`expr $bytes + $2` elif [ -f $i ] then set `ls -ls $i` blocos=`expr $blocos + $1` bytes=`expr $bytes + $6` else fi done echo $blocos $bytes } espaco_r ${1-.} | awk ' {print 100 - (100 * $2) / ($1 * 1024) }' exit