Wie kann ich festlegen, dass "ls" die Dateigröße in Megabyte anzeigt?

442

Welche Befehle benötige ich, damit Linux lsdie Dateigröße in MB anzeigt?

Paul Sheldrake
quelle

Antworten:

513

ls -l --block-size=MSie erhalten eine Auflistung im Langformat (erforderlich, um die Dateigröße tatsächlich zu sehen) und die Dateigrößen werden auf die nächste MB gerundet .

Verwenden Sie --block-size=MBstattdessen MB (10 ^ 6 Byte) und nicht MiB (2 ^ 20 Byte) .

Wenn Sie nicht möchten, dass das MSuffix an die Dateigröße angehängt wird, können Sie so etwas wie verwenden --block-size=1M. Vielen Dank an Stéphane Chazelas für diesen Vorschlag.

Wenn Sie einfach Dateigrößen in "angemessenen" Einheiten anstatt spezifisch Megabyte wünschen , können -lhSie eine Auflistung im Langformat und eine von Menschen lesbare Dateigrößenpräsentation erstellen. Diese Einheiten Dateigröße verwenden , um mit etwa 1-3 Ziffern einzuprägen Dateigrößen zu halten (so werden Sie Dateigrößen wie sehen 6.1K, 151K, 7.1M, 15M, 1.5Gund so weiter.

Der --block-sizeParameter ist in der Manpage für ls beschrieben. man lsund suche nach SIZE. Es erlaubt auch andere Einheiten als MB / MiB und, wie es aussieht (das habe ich nicht ausprobiert), auch beliebige Blockgrößen (so dass Sie die Dateigröße als eine Anzahl von 429-Byte-Blöcken sehen können, wenn Sie möchten) zu).

Beachten Sie, dass beides --block-sizeund -hGNU-Erweiterungen neben der Open Group sindls , sodass dies möglicherweise nicht funktioniert, wenn Sie kein GNU-Benutzerland haben (was die meisten Linux-Installationen tun). Das lsvon GNU Coreutils 8.5 unterstützte --block-size und -h wie oben beschrieben. Vielen Dank an Kojiro für den Hinweis.

ein CVn
quelle
11
Ein Unterschied, den Sie vielleicht beachten sollten: --block-size=MLassen Sie ein MSuffix neben der Größe anzeigen und lassen Sie --block-size=1Mes weg. Es kann auch erwähnenswert sein, dass Sie dafür GNU ls benötigen (die meisten nicht eingebetteten Linux-Systeme werden GNU ls haben).
Stéphane Chazelas
2
Wäre das GNU ls? Standardls hat kein solches Argument. Mit der xsi-Erweiterung ls hat das -sFlag, das es die Anzahl der Blöcke melden lässt, aber es gibt kein Standard-Flag --block-size.
Kojiro
2
@kojiro GNU ls hat --block-sizeab Coreutils 8.5 das, was auf meinem Debian Squeeze-System installiert ist. Da die Frage ausdrücklich für Linux war und nichts anderes spezifizierte, werde ich zugeben, dass ich ein Userland angenommen habe, das sich um GNU-Coreutils dreht. Ich habe die Antwort aktualisiert, um dies zu klären. (Außerdem scheint Open Group ls auch kein -h zu haben. :))
ein Lebenslauf vom
2
@EmanuelBerg, 1000 ^ 7 (10 ^ 21) ist größer als 2 ^ 64 (das ist ~ 10 ^ 19.27)
Stéphane Chazelas
4
@Tom Wie es im letzten Absatz der Antwort heißt, --block-sizehandelt es sich um eine GNU-Erweiterung. Ich vermute, dass Mac OS X GNU nicht verwendet ls.
ein Lebenslauf vom
384

ls -lh gibt lesbare Dateigrößen, langes Format.

Je nach Bedarf werden die Suffixe k, M, G und T (oder kein Suffix für Bytes) verwendet, damit die Anzahl klein bleibt, z . B. 1.4Koder 178M.

-h ist eine GNU-Coreutils-Erweiterung, nicht POSIX.

Beachten Sie, dass hierdurch die Frage nicht genau so beantwortet wird, wie sie gestellt wurde. Wenn Sie auch für kleine oder riesige Dateien nur MiB-Größen benötigen, gilt dies für GNU coreutils von Michael Kjörlingls .

Sirex
quelle
4
Damit werden Dateigrößen in GB für alles gedruckt, was größer als 1,0 GiB ist (glaube ich).
ein Lebenslauf
5
@ MichaelKjörling Ich sehe es nicht als schlechte Antwort (obwohl ich nicht positiv bewertet habe). Manchmal formuliert das OP eine Frage nicht genau so, wie sie sollte, so dass es möglich war, dass sie nur eine vom Menschen lesbare Ausgabe wollten und diese stattdessen als "in MB" formulierte.
Dason
5
Upvoted. "Dies beantwortet nicht die (MB) -Frage" ist eine absolut gültige Aussage, aber diese Antwort hat den Nutzen dieser SO-Seite nur erhöht, da diese Antwort im selben Kontext ist. Ich bin nur auf diese Seite gekommen, um nach einer Lösung für die generische Anforderung "Datumsangaben in lesbarer Form h--block-size=M
anzeigen
6
"Menschenlesbar" ist irgendwie ironisch. Wer nutzt ls -lüberhaupt wenn nicht Menschen? : p
Blauhirn
2
@chengyang: Das Parsen der ls -lAusgabe ist in 99% der Fälle die falsche Vorgehensweise. unix.stackexchange.com/questions/128985/why-not-parse-ls . Diese 1% sind großzügig und so gut wie auf Einzeiler beschränkt, die Sie zur einmaligen Verwendung interaktiv schreiben, und nicht auf ein Skript, das Sie wiederholt für unbekannte Dateinamen verwenden werden.
Peter Cordes
45

ls -lhS Nach Größe sortieren, in lesbarem Format

jaciefan
quelle
2
In den Kommentaren zur ls -lhAntwort finden Sie Gründe, warum dies die Frage nicht wirklich beantwortet.
Alexander Batischev
2
Dies beantwortet nicht nur nicht wirklich die Frage (wie in den Kommentaren zu Sirex 'Antwort besprochen), sondern fügt auch nichts Relevantes über eine der vorhandenen Antworten hinzu: Das OP fragt nicht nach der Sortierreihenfolge.
einen Lebenslauf
6
Ich dachte nur, das Sortieren nach Größe ist eine mögliche Folge, die die Leute haben könnten, zumindest war es das, was ich hatte
jaciefan
1
In diesem Fall sollten die Benutzer sich ansehen, wie alle Dateien aufgelistet werden, die nach Größe geordnet sind und genau diesem Szenario entsprechen.
ein CVn
Ich halte dies für eine würdige Ergänzung zu den Antworten, insbesondere, da die Sirex-Antwort
Dowlers,
9

Und dies ist die Option, um alles in einer Verzeichnisreihenfolge nach Dateigröße (immer noch lesbar) aufsteigend aufzulisten.

ls -lSrh
Marcos Placona
quelle
Denken Sie, dass die Kommentare der anderen Antwort, die die Frage nicht beantworten , auch für diese gelten?
Dan Dascalescu
@DanDascalescu Nein. Diese Kommentare sind nicht hilfreich. Die 2 fraglichen Antworten sind. Nur meine 2 Cent als Hack, um herauszufinden, wie man Dateigrößen in einem Linux-System auflistet, von dem er nichts weiß.
Dowlers