msoliver
(usa Debian)
Enviado em 14/02/2016 - 03:11h
FRANK_ escreveu:
como faço para escrever comandos ou um script para listar arquivos maiores que um determinado tamanho (recebido em uma variável) no diretório atual e seus subdiretórios (recursivamente)
_____________________________________________________________
O método mais rápido, menor comando, é o do listeiro_037, só faltou o
RECURSIVO . Rsrsrsr
ls -lR | awk '{ if($5>1000) print $0; }'
Tentarei ser bastante didático, um passo a passo para iniciante.
Vamos lá!
Aqui no VOL tem muito material de ótima qualidade, recomendo o citado abaixo, por ser um resumão .
Leia com atenção:
http://goo.gl/DRZwZ7
Lista tudo detalhada e recursivamente.
ls -lR
Mas não é isso que deseja . . .
Vamos filtrar a saída, e obter somente arquivos . . . (não é necessário, somente ilustrativo)
grep -E '^-..' => Mostra somente os arquivos que iniciam com -, qquer coisa, qquer coisa
ls -lR | grep -E '^-..'
Tem muito espaço nessa listagem....
Um
SED , resolve isso. Esse comando troca
sequencia de espaços por
um espaço
Também tem muita informação, vamos "pegar" somente
TAMANHO e
NOME DO ARQUIVO (não é necessário, somente ilustrativo)
cut -d " " -f5,9 => Mostra somente o campo 5 e o campo 9
ls -lR | grep -E '^-..' |sed 's/[ ]\+/ /g' |cut -d " " -f5,9 >> ARQUIVOS.txt
Agora, vamos ler linha por linha, comparar o valor do
CAMPO SIZE com
SIZEDEF e mostrar na TELA o que INTERESSA.
DEFINE o TAMANHO REQUERIDO
SIZEDEF="1000"
while IFS=" " read -r SIZE NAME ;do
(($SIZE > $SIZEDEF)) && echo -e "$NAME:$SIZE"
done < ARQUIVOS.txt
Script:
#!/bin/bash
#DEFINE SIZE
SIZEDEF="100000000"
ls -lR | grep -E '^-..' | sed 's/[ ]\+/ /g' |cut -d " " -f5,9 >> ARQUIVOS.txt
echo -e "\nARQUIVOS MAIORES QUE $SIZEDEF\n"
while IFS=" " read -r SIZE NAME ;do
(($SIZE > $SIZEDEF)) && echo -e "$NAME:$SIZE"
done < ARQUIVOS.txt
Traduzindo:
Enquanto o ( Internal Field Separator = IFS) separador de campos for " " , Faça:
Atribua os valores as variáveis =>
read -r SIZE NAME
Se TAMANHO do ARQUIVO for MAIOR QUE TAMANHO DEFINIDO , mostre na tela =>
(($SIZE > $SIZEDEF)) && echo -e "$NAME:$SIZE"
done < ARQUIVOS.txt => busca as informações em ARQUIVOS.txt, finaliza o laço.
Isso é o básico!
Att.:
Marcelo