
Quero verificar se o tamanho do arquivo mais recente é maior que 2 MB:
test $(ls -st | head -n2 | tail -n1 | awk '{print $1}') -gt 2097152 && echo "true"
Existe uma maneira mais eficiente ou elegante de fazer isso?
Eu tentei canalizar ainda mais a saída do awk para
| test {} -gt 2097152
mas pegue
bash: teste: {}: expressão inteira esperada
Então
| test {}>"2097152"
produz sempre 'verdadeiro', então eu criei a construção
test $(...) -gt 2097152
Responder1
Pode haver maneiras melhores do que ls
obter o arquivo mais recente, mas a maior parte do que você faz pode ser feito apenas no awk:
ls -st | awk 'NR == 2 && $1 > 2097152 {print "true"}'
NR == 2
- na segunda linha$1 > 2097152
- quando a primeira coluna é maior que 2097152
Responder2
Com zsh
:
set -- *(.om[1]) *(N.L+2097152om[1])
if [[ $1 = $2 ]]; then
printf '%s\n' "The apparent size of the newest non-hidden regular file in the current" \
"directory ($1) is strictly greater than 2MiB."
fi
Se você quiser incluir diretórios ocultos, adicione D
ambos os qualificadores glob. Se você quiser considerar arquivos não regulares (diretórios, links simbólicos, dispositivos...), remova.
A ideia é expandir esses dois globos:
.
a lista de arquivos regulares ( ) não ocultos ,o
ordenados porm
tempo de modificação, limitados a um ([1]
).- o mesmo, mas limitado a arquivos cujo
L
comprimento é estritamente maior (+
) que2097152
(mas habilitandoN
ullGlob, portanto não será um erro fatal se não houver correspondência).
E nossa condição significa que ambos os globos se expandem para o mesmo arquivo.
Observe que ls -s
, não informa o tamanho dos arquivos, mas sim o uso do disco (em número de unidades de 512 bytes, ou KiB ou outro, dependendo da ls
implementação e/ou do ambiente). ls
informa o tamanho do arquivo nelelongoformato de saída ( ls -l
ou ls -n
(ou -o
/ -g
com algumas implementações)).
Outra opção é usar zsh
o builtin do stat
para obter o tamanho (ou uso do disco) do arquivo mais recente:
zmodload zsh/stat
if
stat -LH s -- *(.om[1]) &&
((s[size] > 2097152))
then
printf '%s\n' "The apparent size of the newest non-hidden regular file in the current" \
"directory ($1) is strictly greater than 2MiB."
fi
Ou:
zmodload zsh/stat
if
stat -LH s -- *(.om[1]) &&
((s[blocks] > 2097152))
then
printf '%s\n' "The newest non-hidden regular file in the current directory" \
"($1) uses more than 2097152 512-byte units of disk space."
fi
(em outras palavras, seu uso de disco é superior a 1GiB)