Как каждый узнает, сколько битов файл имеет в одной команде?

Я понимаю, что это - старый вопрос, но я просто должен был добавить свою ценность за 2 цента:

1) Я настоятельно рекомендовал бы Бодхи Linux. Это имеет фантастический пользовательский интерфейс (хорошая услада для глаз) все же требует только этих минимальных аппаратных спецификаций: 300+MHz ЦП, 128 МБ RAM и 2.5 ГБ пространства на жестком диске (см. их о странице),

2) Что касается бесплатного распространения, Вы не должны далеко смотреть, они примерно все бесплатно ;-)

Кроме того, Бодхи является производной Ubuntu, означая, что не только легко установить, но и можно извлечь выгоду из всех пакетов в репозитории Ubuntu.

8
27.01.2014, 13:04
5 ответов

С GNU du:

du -b FILE | awk '{ print $1, "* 8" }' | bc
14
27.01.2020, 20:08
  • 1
    Кроме него не нуждается bc - awk может сделать саму математику: du -b FILE | awk '{print $1 * 8} –  aragaer 27.01.2014, 03:23
  • 2
    См. также wc -c < FILE для портативного эквивалента (для нерегулярных файлов, это имеет побочный эффект чтения их, хотя) –  Stéphane Chazelas 27.01.2014, 10:45

Оболочка + 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) ))
5
27.01.2020, 20:08
  • 1
    @StephaneChazelas спасибо за информацию. Ответ обновляется. –  John1024 27.01.2014, 01:30
  • 2
    Это кажется хорошим объяснением, спасибо. Однако в моем тесте эта команда, возвращенная мне: title:7: плохое математическое выражение: операнд, ожидаемый в '%s'] 2; повторите 4 096 000----, которые ответ 4096000, но каковы другие ошибки? –  Felipe 27.01.2014, 01:49
  • 3
    @FelipeMicaroniLalli я не могу воспроизвести ту ошибку и я не вижу обстоятельства, которое было бы и (a) давать то сообщение об ошибке, и в то же время (b) дают правильный числовой ответ. Любопытный. –  John1024 27.01.2014, 02:24

Это возможно в одной строке, потому что можно поместить несколько команд на одну строку, например, соединенный каналами или управлять заменами:

echo $(stat -c %s FILE) '* 8' | bc

(Спасибо @frostschutz для обновления).

3
27.01.2020, 20:08
  • 1
    Обработанный как очарование мне. ➜ tmp статистика random-file-3 | sed-n 's/Size: ([0-9] *).*/\1 * 8/p' | до н.э ➜ 4096000 –  Felipe 27.01.2014, 01:49
  • 2
    Не будет работать в неанглийских локалях или в системах не-GNU или для названного файла ZSize: 5 например –  Stéphane Chazelas 27.01.2014, 10:51
  • 3
    как насчет stat -c %s FILE распечатать размер непосредственно, вместо sed? –  frostschutz 27.01.2014, 12:51

С GNU find (предшествует GNU stat к десятилетиям):

find file -prune -printf '%s*8\n' | bc

Относительно портативно:

ls -ld -- "$file" | awk '{print $5*8;exit}'
3
27.01.2020, 20:08

Единственный файл:

wc -c yourfile | awk '{print $1*8}'

Файлы Mutiple:

wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'

Этот также работает на единственный файл. Это не является абсолютно пуленепробиваемым, хотя, см. комментарий Stephane.

Это стандарт POSIX совместимые команды.

2
27.01.2020, 20:08
  • 1
    Большой.Потрясающе. ➜ tmp туалет-c random-file-1 random-file-2 random-file-3 | awk '{1$* =8; распечатайте 0$}' ➜ 32 832 random-file-1 ➜ 49 152 random-file-2 ➜ 4 096 000 random-file-3 ➜ 4 177 984 общих количества –  Felipe 27.01.2014, 01:56
  • 2
    Обратите внимание, что это имеет побочные эффекты, если файлы не являются регулярными файлами. Второй отобразил бы a a    b файл как a b (последовательности пробелов преобразовываются в одиночный пробел, удаленные конечные пробелы). –  Stéphane Chazelas 27.01.2014, 10:48
  • 3
    @StephaneChazelas с тем, какой нерегулярный файл Вы пробовали? –  Totor 29.01.2014, 10:32
  • 4
    Любой тип (fifos, сокеты, двери, устройства, каталоги...). У Вас будут проблемы с именами файлов, содержащими символы новой строки также. Можно хотеть добавить a NR == 1 –  Stéphane Chazelas 29.01.2014, 11:18

Теги

Похожие вопросы