2016-08-31 4 views
0

Ich verwende Folgendes, um menschenfreundliche Dateigrößen aus der Shell zu erhalten.humane Dateigröße von Shell in Unix-artigen Umgebungen erhalten [Portabilität]

ls -hl /path/to/file | awk '{print $5}' 

Es funktioniert gut in Mac OSX mit bash. Ich bin mir nicht sicher, ob es wirklich tragbar ist, oder ob es einen standardmäßigen tragbaren Weg gibt, um das gleiche Ergebnis zu erzielen.

+1

Anstatt "ls" zu analysieren, überprüfen Sie Ihre 'stat'-Manpage. –

+0

Für die Portabilität sollten Sie jedoch eine allgemeine Sprache verwenden, die auf mehreren Plattformen identisch ausgeführt wird. Zum Beispiel http://stackoverflow.com/a/512645/7552 –

+0

Wie portabel suchen Sie? POSIX? SUS? Eingebettete Systeme, auf denen busybox läuft – cxw

Antwort

1

Die meisten Implementierungen von du(1) akzeptieren das Flag , das dazu führt, dass die Datenträgerverwendung der angegebenen Datei (en) angegeben wird. Der Unterschied zwischen Festplattennutzung und Dateigröße ist normalerweise unschädlich und wird auf den nächsten Dateisystemblock aufgerundet.

Die -h Flagge, obwohl weit unterstützt, ist eine Erweiterung. Für eine maximale Portabilität müsste die Einheitenumrechnung manuell durchgeführt werden, und zwar unter pointed out by chepner.

*BSD, Illumos, BusyBox und GNU CoreUtils unterstützen alle die Flagge.

0

Wenn Sie wirklich strenge POSIX-Kompatibilität wollen, dann wie Sie tun müssen, in this answer to a very similar question vorgeschlagen wird, und Ihre eigene Berechnung zu tun (zum Beispiel in awk auch) den gewünschten „menschenfreundlichen“ Wert zu berechnen.