ls -lat
は、ファイルに含まれるバイト数を調べ、8を掛けてビット数を調べます。しかし、これは1つのコマンドラインでのみ可能ですか?
GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
シェル+ GNU coreutilsソリューション:
echo $(( 8 * $(stat -c%s FILE) ))
-c%s
オプションをstat
に指定すると、ファイルサイズのみがバイト単位で返されるため、追加のテキスト処理が不要になります。この構文はGNU coreutilsでサポートされているため、ほとんどのLinuxディストリビューションで動作するはずです。
Linuxの例外として、オプションのzsh/statモジュールを使用してzshを実行している場合は、GNU coreutilsを取得するためのパスを指定する必要があります。
echo $(( 8 * $(command stat -c%s FILE) ))
GNU find
(predates GNU stat
by decimals))の場合:
find file -Prune -printf '%s*8\n' | bc
比較的移植性が高い:
ls -ld -- "$file" | awk '{print $5*8;exit}'
たとえば、パイプまたはコマンド置換によって接続されます:
echo $(stat -c %s FILE) '* 8' | bc
(更新をありがとう@frostschutz)。
単一ファイル:
wc -c yourfile | awk '{print $1*8}'
複数のファイル:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
これは単一のファイルでも機能します。ただし、完全に防弾ではありません。Stephaneのコメントを参照してください。
これらはPOSIX標準に準拠したコマンドです。