So che posso usare ls -lat
per scoprire quanti byte ha un file e quindi moltiplicare per 8 per scoprire quanti bit. Ma è possibile solo in una riga di comando?
So che posso usare ls -lat
per scoprire quanti byte ha un file e quindi moltiplicare per 8 per scoprire quanti bit. Ma è possibile solo in una riga di comando?
Risposte:
Con GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc
- awk
può fare la matematica da solo:du -b FILE | awk '{print $1 * 8}
wc -c < FILE
per un equivalente portatile (per i file non regolari, ha l'effetto collaterale di leggerli, però)
Una soluzione coreutils shell + GNU:
echo $(( 8 * $(stat -c%s FILE) ))
L' -c%s
opzione per stat
restituire solo la dimensione del file in byte, eliminando qualsiasi necessità di ulteriore elaborazione del testo. Questa sintassi è supportata dai coreutils GNU e quindi dovrebbe funzionare con la maggior parte delle distribuzioni di Linux.
Come eccezione su Linux, se si esegue zsh con il modulo opzionale zsh / stat, è necessario specificare un percorso per ottenere i coreutils GNU:
echo $(( 8 * $(command stat -c%s FILE) ))
Con GNU find
(precede GNU stat
di decenni):
find file -prune -printf '%s*8\n' | bc
Relativamente portabile:
ls -ld -- "$file" | awk '{print $5*8;exit}'
È possibile su una riga, perché è possibile inserire più comandi su una riga, ad esempio collegati da pipe o sostituzioni di comandi:
echo $(stat -c %s FILE) '* 8' | bc
(Grazie @frostschutz per l'aggiornamento).
ZSize: 5
ad esempio
stat -c %s FILE
di stampare direttamente il formato, anziché il sed
?
File singolo:
wc -c yourfile | awk '{print $1*8}'
File multipli:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Questo funziona anche per un singolo file. Non è completamente a prova di proiettile, vedi il commento di Stephane .
Questi sono comandi conformi allo standard POSIX.
a b
file come a b
(sequenze di spazi vuoti convertiti in un singolo spazio, rimossi spazi vuoti).
NR == 1