Я знаю, что могу использовать, ls -lat
чтобы узнать, сколько байтов имеет файл, а затем умножить на 8, чтобы узнать, сколько битов. Но возможно ли это только в одной командной строке?
Я знаю, что могу использовать, ls -lat
чтобы узнать, сколько байтов имеет файл, а затем умножить на 8, чтобы узнать, сколько битов. Но возможно ли это только в одной командной строке?
Ответы:
С GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc
- awk
может сделать математику сам:du -b FILE | awk '{print $1 * 8}
wc -c < FILE
для переносимого эквивалента (для нерегулярных файлов, это имеет побочный эффект чтения их)
Решение shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
-c%s
Опция stat
возвращает только размер файла в байтах, исключая любую необходимость в дополнительной обработке текста. Этот синтаксис поддерживается GNU coreutils и поэтому должен работать в большинстве дистрибутивов Linux.
В качестве исключения в Linux, если вы запускаете zsh с необязательным модулем zsh / stat, нужно указать путь для получения GNU coreutils:
echo $(( 8 * $(command stat -c%s FILE) ))
С GNU find
(предшествует GNU stat
десятилетиями):
find file -prune -printf '%s*8\n' | bc
Относительно переносимо:
ls -ld -- "$file" | awk '{print $5*8;exit}'
Это возможно в одной строке, потому что вы можете поместить несколько команд в одну строку, например, связанных трубами или подстановками команд:
echo $(stat -c %s FILE) '* 8' | bc
(Спасибо @frostschutz за обновление).
ZSize: 5
например,
stat -c %s FILE
печати размера, а не sed
?
Отдельный файл:
wc -c yourfile | awk '{print $1*8}'
Mutiple файлы:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Этот также работает для одного файла. Это не полностью пуленепробиваемый, хотя, см. Комментарий Стефана .
Это стандартные команды POSIX.
a b
файл как a b
(последовательности пробелов, преобразованные в один пробел, удаленные пробелы удалены).
NR == 1