Testgröße der neuesten Datei

Testgröße der neuesten Datei

Ich möchte prüfen, ob die Größe der neuesten Datei größer als 2 MB ist:

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

Gibt es eine effizientere oder elegantere Möglichkeit, dies zu tun?

Ich habe versucht, die Ausgabe von awk weiterzuleiten an

| test {} -gt 2097152

aber bekommen

bash: test: {}: ganzzahliger Ausdruck erwartet

Dann

| test {}>"2097152"

ergibt immer "true", also habe ich mir die Konstruktion ausgedacht

test $(...) -gt 2097152

Antwort1

Es mag bessere Möglichkeiten geben, als lsdie neueste Datei abzurufen, aber das meiste, was Sie tun, können Sie einfach in awk erledigen:

ls -st | awk 'NR == 2 && $1 > 2097152 {print "true"}'
  • NR == 2- in der zweiten Zeile
  • $1 > 2097152- wenn die erste Spalte größer als 2097152 ist

Antwort2

Mit 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

Wenn Sie versteckte Verzeichnisse einschließen möchten, fügen Sie Dbeiden Glob-Qualifizierern hinzu. Wenn Sie nicht reguläre Dateien (Verzeichnisse, Symlinks, Geräte...) berücksichtigen möchten, entfernen Sie.

Die Idee besteht darin, diese beiden Globs zu erweitern:

  1. die Liste der nicht versteckten regulären ( .) Dateien, osortiert nach mÄnderungszeitpunkt, begrenzt auf eine ( [1]).
  2. das Gleiche, aber beschränkt auf Dateien, deren LLänge strikt größer ( +) ist als 2097152(aber NullGlob wird aktiviert, sodass es kein schwerwiegender Fehler ist, wenn keine Übereinstimmung vorliegt).

Und unsere Bedingung ist, dass beide Globs in dieselbe Datei expandiert werden.

Beachten Sie, dass ls -snicht die Größe der Dateien gemeldet wird, sondern deren Festplattennutzung (in Einheiten von 512 Byte oder KiB oder anderen Einheiten, je nach Implementierung lsund/oder Umgebung). lsmeldet die darin enthaltene DateigrößelangAusgabeformat ( ls -loder ls -n(oder -o/ -gbei einigen Implementierungen)).

zshEine andere Möglichkeit besteht darin , das integrierte Feature von zu verwenden, statum die Größe (oder den Festplattenverbrauch) der neuesten Datei abzurufen:

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

Oder:

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

(mit anderen Worten, die Festplattennutzung beträgt mehr als 1 GiB)

verwandte Informationen