
Ich muss die größte Datei im aktuellen und nachfolgenden Verzeichnis finden. Ich habe versucht
ls -Rlh | awk '{print $3 " " $5 " " $9}'
weiß aber nicht, ob es in Ordnung ist, wie man die größte Datei sortiert und auswählt.
Antwort1
GNUfind
+sort
+head
Lösung (für jede Verzeichnistiefe), vorausgesetzt, Dateipfade enthalten keine Zeilenumbruchzeichen:
find . -type f -printf "%s %p\n" | sort -nr | head -1
%s
- Formatbezeichner, der auf die Dateigröße (in Bytes) verweist%p
- Formatbezeichner, der auf den Dateinamen verweistsort -nr
- Datensätze numerisch in umgekehrter Reihenfolge sortierenhead -1
- druckt die OBERSTE Zeile/den ersten Datensatz
Um einefür Menschen lesbarDateigrößenwert – Erweitern Sie die Pipeline mit einem GNU- numfmt
Befehl (falls unterstützt):
find . -type f -printf "%s %p\n" | sort -nr | head -1 | numfmt --to=si
Antwort2
Mit zsh
für die größte reguläre Datei:
ls -ld -- **/*(.DOL[1])
(natürlich können Sie es ls -ld --
durch jeden beliebigen Befehl ersetzen. Wenn Sie GNU ls
oder ein kompatibles verwenden, beachten Sie auch die -h
Option fürfür Menschen lesbare Größen)
.
: nurregulärDateien (keine Verzeichnisse, symbolische Links, Geräte, FIFOs …)D
: Versteckte einschließen und in versteckte Verzeichnisse absteigenOL
: umgekehrte Reihenfolge nach Größe (L
Länge).[1]
: nur die erste Übereinstimmung.
Bei Gleichstand erhalten Sie einen beliebigen davon nach dem Zufallsprinzip. Wenn Sie den Erstplatzierten in alphabetischer Reihenfolge haben möchten, fügen Sie ein Extra on
( o
rder by n
ame) hinzu, um Gleichstände alphabetisch zu sortieren.