Você poderia:
-
Para verificar o intervalo, você pode usar uma instrução
ifoucontinue:if [[ $z -ge $1 || $z -le $2 ]] then : print result fiou
[[ $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,duoulspara 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 fiou, para evitar o aninhamento de if's:
! [[ -f "$f" ]] && continuecom 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
printfpara 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