Tamanho de teste do arquivo mais recente

Tamanho de teste do arquivo mais recente

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 lsobter 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 Dambos os qualificadores glob. Se você quiser considerar arquivos não regulares (diretórios, links simbólicos, dispositivos...), remova.

A ideia é expandir esses dois globos:

  1. .a lista de arquivos regulares ( ) não ocultos , oordenados por mtempo de modificação, limitados a um ( [1]).
  2. o mesmo, mas limitado a arquivos cujo Lcomprimento é estritamente maior ( +) que 2097152(mas habilitando NullGlob, 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 lsimplementação e/ou do ambiente). lsinforma o tamanho do arquivo nelelongoformato de saída ( ls -lou ls -n(ou -o/ -gcom algumas implementações)).

Outra opção é usar zsho builtin do statpara 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)

informação relacionada