Ich weiß, dass ich ls -lat
damit herausfinden kann, wie viele Bytes eine Datei enthält, und dann mit 8 multiplizieren kann, um herauszufinden, wie viele Bits es gibt. Aber ist das nur in einer Kommandozeile möglich?
Ich weiß, dass ich ls -lat
damit herausfinden kann, wie viele Bytes eine Datei enthält, und dann mit 8 multiplizieren kann, um herauszufinden, wie viele Bits es gibt. Aber ist das nur in einer Kommandozeile möglich?
Antworten:
Mit GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc
- awk
kann selbst du -b FILE | awk '{print $1 * 8}
wc -c < FILE
für ein tragbares Äquivalent (für nicht reguläre Dateien hat es den Nebeneffekt, sie zu lesen)
Eine Shell + GNU Coreutils-Lösung:
echo $(( 8 * $(stat -c%s FILE) ))
Die -c%s
Option, stat
nur die Dateigröße in Bytes zurückzugeben, macht zusätzliche Textverarbeitung überflüssig. Diese Syntax wird von GNU-Coreutils unterstützt und sollte daher unter den meisten Linux-Distributionen funktionieren.
Wenn unter Linux zsh mit dem optionalen zsh / stat-Modul ausgeführt wird, muss ausnahmsweise ein Pfad angegeben werden, um die GNU-Coreutils abzurufen:
echo $(( 8 * $(command stat -c%s FILE) ))
Mit GNU find
( stat
um Jahrzehnte vor GNU ):
find file -prune -printf '%s*8\n' | bc
Relativ tragbar:
ls -ld -- "$file" | awk '{print $5*8;exit}'
Dies ist in einer Zeile möglich, da Sie mehrere Befehle in eine Zeile einfügen können, z. B. durch Pipes oder Befehlsersetzungen verbunden:
echo $(stat -c %s FILE) '* 8' | bc
(Danke @frostschutz für das Update).
ZSize: 5
zum Beispiel aufgerufen wird
stat -c %s FILE
, die Größe direkt anstelle der zu drucken sed
?
Einzelne Datei:
wc -c yourfile | awk '{print $1*8}'
Mehrere Dateien:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Dieser funktioniert auch für eine einzelne Datei. Es ist jedoch nicht vollständig kugelsicher, siehe Stephanes Kommentar.
Dies sind POSIX-Standard-kompatible Befehle.
a b
Datei als anzeigen a b
(Sequenzen von Leerzeichen, die in ein einzelnes Leerzeichen konvertiert wurden, nachfolgende Leerzeichen entfernt).
NR == 1