Tamaño de prueba del archivo más nuevo

Tamaño de prueba del archivo más nuevo

Quiero comprobar si el tamaño del archivo más reciente es superior a 2 MB:

test $(ls -st | head -n2 | tail -n1 | awk '{print $1}') -gt 2097152 && echo "true"

¿Existe una forma más eficiente o elegante de hacer esto?

Intenté canalizar aún más la salida de awk a

| test {} -gt 2097152

pero consigue

bash: prueba: {}: expresión entera esperada

Entonces

| test {}>"2097152"

produce siempre "verdadero", así que se me ocurrió la construcción

test $(...) -gt 2097152

Respuesta1

Puede que haya mejores formas que lsobtener el archivo más nuevo, pero la mayor parte de lo que haces se puede hacer simplemente en awk:

ls -st | awk 'NR == 2 && $1 > 2097152 {print "true"}'
  • NR == 2- en la segunda línea
  • $1 > 2097152- cuando la primera columna es mayor que 2097152

Respuesta2

Con 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

Si desea incluir directorios ocultos, agréguelos Da ambos calificadores globales. Si desea considerar archivos no regulares (directorios, enlaces simbólicos, dispositivos...), elimine.

La idea es expandir ambos globos:

  1. .la lista de archivos regulares ( ) no ocultos , oordenados por mtiempo de modificación, limitado a uno ( [1]).
  2. lo mismo pero limitado a archivos cuya Llongitud sea estrictamente mayor ( +) que 2097152(pero habilitando NullGlob para que no sea un error fatal si no hay coincidencia).

Y nuestra condición es si ambos globos se expanden al mismo archivo.

Tenga en cuenta que ls -sno informa el tamaño de los archivos, sino su uso del disco (en número de unidades de 512 bytes, KiB u otro según la lsimplementación y/o el entorno). lsinforma el tamaño del archivo en éllargoformato de salida ( ls -lo ls -n(o -o/ -gcon algunas implementaciones)).

Otra opción es usar zshel archivo statincorporado para obtener el tamaño (o el uso del disco) del archivo más reciente:

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

O:

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

(en otras palabras, su uso de disco es superior a 1GiB)

información relacionada