Você poderia:
-
Para verificar o intervalo, você pode usar uma instrução
if
oucontinue
:if [[ $z -ge $1 || $z -le $2 ]] then : print result fi
ou
[[ $z -lt $1 || $z -gt $2 ]] && continue : print result
-
Dependendo das necessidades, as opções de teste são:
-
-ge
: maior que ou igual a -
-le
: menor ou igual a -
-lt
: menor que -
-gt
: maior que
-
-
Use
stat
,du
ouls
para obter o tamanho. Os dois últimos exigiriam uma verificação para ver se o destino também é um diretório ou arquivo regular:if [[ -f "$f" ]] then : a regular file fi
ou, para evitar o aninhamento de if's:
! [[ -f "$f" ]] && continue
com tamanhos de arquivo, por exemplo:
z=$(stat -c%s "$f") z=$(du -b "$f" | cut -f1) z=$(ls -l "$f" | cut -d' ' -f5)
-
Para imprimir o resultado, você pode usar
printf
para obter uma impressão mais limpa. Ou seja fixo com tamanho etc. Leia também isto. -
Se você realmente quer ser legal, valide os argumentos também ...
#!/bin/bash
usage()
{
printf "Usage: %s <min-size> <max-size>\n" "$0" >&2
exit 1
}
! [[ "$1" =~ ^[0-9]+$ ]] && usage
! [[ "$2" =~ ^[0-9]+$ ]] && usage
for f in *
do
z=$(stat -c%s "$f")
# Alternatives to get size:
# ! [[ -f "$f" ]] && continue
# z=$(du -b "$f" | cut -f1)
# z=$(ls -l "$f" | cut -d' ' -f5)
if [[ $z -ge $1 || $z -le $2 ]]
then
printf "%11d %s\n" "$z" "$f"
fi
done