Saya tahu saya dapat menggunakan ls -lat
untuk mengetahui berapa banyak byte yang memiliki file dan kemudian kalikan dengan 8 untuk mengetahui berapa banyak bit. Tetapi apakah ini mungkin hanya dalam satu baris perintah?
Saya tahu saya dapat menggunakan ls -lat
untuk mengetahui berapa banyak byte yang memiliki file dan kemudian kalikan dengan 8 untuk mengetahui berapa banyak bit. Tetapi apakah ini mungkin hanya dalam satu baris perintah?
Jawaban:
Dengan GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc
- awk
bisa melakukan matematika sendiri:du -b FILE | awk '{print $1 * 8}
wc -c < FILE
untuk padanan portabel (untuk file non-reguler, meskipun memiliki efek samping membacanya)
Solusi shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
The -c%s
pilihan untuk stat
kembali hanya ukuran file dalam byte, menghilangkan kebutuhan untuk pengolahan teks tambahan. Sintaks ini didukung oleh GNU coreutils dan karenanya harus bekerja di bawah sebagian besar distribusi linux.
Sebagai pengecualian di linux, jika seseorang menjalankan zsh dengan modul zsh / stat opsional, maka seseorang harus menentukan jalur untuk mendapatkan GNU coreutils:
echo $(( 8 * $(command stat -c%s FILE) ))
Dengan GNU find
(mendahului GNU stat
oleh dekade):
find file -prune -printf '%s*8\n' | bc
Relatif portable:
ls -ld -- "$file" | awk '{print $5*8;exit}'
Hal ini dimungkinkan dalam satu baris, karena Anda dapat menempatkan beberapa perintah pada satu baris, misalnya terhubung dengan pipa atau penggantian perintah:
echo $(stat -c %s FILE) '* 8' | bc
(Terima kasih @ Frostschutz untuk pembaruan).
ZSize: 5
misalnya
stat -c %s FILE
dengan mencetak ukuran secara langsung, bukan sed
?
File tunggal:
wc -c yourfile | awk '{print $1*8}'
File mutiple:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Yang ini juga berfungsi untuk satu file. Ini tidak sepenuhnya anti peluru, lihat komentar Stephane .
Ini adalah perintah yang memenuhi standar POSIX.
a b
file sebagai a b
(urutan kosong dikonversi ke satu ruang, trailing blank dihapus).
NR == 1