Saya tahu saya dapat menggunakan ls -latuntuk 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 -latuntuk 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- awkbisa melakukan matematika sendiri:du -b FILE | awk '{print $1 * 8}
wc -c < FILEuntuk padanan portabel (untuk file non-reguler, meskipun memiliki efek samping membacanya)
Solusi shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
The -c%spilihan untuk statkembali 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 statoleh 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: 5misalnya
stat -c %s FILEdengan 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 bfile sebagai a b(urutan kosong dikonversi ke satu ruang, trailing blank dihapus).
NR == 1