Портативный способ получить размер файла (в байтах) в оболочке?

Некоторое изменение Lisp, который компилирует в машинный код, могло быть почти с такой скоростью, как C++ для этого вида программирования. Непослушная Собака команда создала версию Lisp, названного Игра Ориентированный блок Lisp , который они раньше создавали несколько заголовков AAA, включая серию Jak и Daxter. Два главных препятствия для подхода Lisp в игровой индустрии были бы раскопанной природой разработки C/C++ (оба инструмента, и человеческие активы в большой степени инвестируют в C/C++), а также трудность нахождения талантливых инженеров, которые являются звездами и в игровом домене программирования и в языке Lisp.

Многие команды программистов в промышленности смещаются к гибридному подходу, где код в реальном времени, особенно графика и код физики, написан в C или C++, но игровая логика сделана в высокоуровневом языке сценариев, который доступен для и доступен для редактирования программистами и непрограммистами одинаково. Lua и Python оба популярны для высокоуровневых сценариев.

109
задан 29 November 2009 в 12:20
поделиться

8 ответов

wc -c (сокращенно от слова «количество слов», -c выводит количество байтов) является переносимым решением POSIX . Только выходной формат может быть неоднородным для разных платформ, так как некоторые пробелы могут быть добавлены в начале (как в случае с Solaris).

Не пропускайте перенаправление ввода. Когда файл передается в качестве аргумента, имя файла печатается после счетчика байтов.

Я волновался, что это не сработает для двоичных файлов, но работает нормально как в Linux, так и в Solaris. Вы можете попробовать это с помощью wc -c . Более того, утилиты POSIX гарантированно обрабатывают двоичные файлы , если явно не указано иное.

198
ответ дан 24 November 2019 в 03:19
поделиться

Вы пробовали du ​​-ks | awk '{напечатать $ 1 * 1024}'. Это может сработать.

-7
ответ дан 24 November 2019 в 03:19
поделиться

в Linux вы можете использовать du -h $ FILE , это работает и на Solaris?

-4
ответ дан 24 November 2019 в 03:19
поделиться

В Solaris есть трюк, который я использовал: если вы запрашиваете размер более чем одного файла, он возвращает только общий размер без имен, поэтому включите пустой файл, например / dev / null как второй файл:

например command fileyouwant / dev / null

Я не могу вспомнить, какая команда размера работает для ls / wc / etc - к сожалению, у меня нет окна Solaris, чтобы проверить это.

-3
ответ дан 24 November 2019 в 03:19
поделиться

если у вас есть Perl на вашем Solaris, используйте его. В противном случае следующий лучший выбор - ls с awk, поскольку у вас нет статистики или ваша find не является поиском GNU.

-3
ответ дан 24 November 2019 в 03:19
поделиться

Наконец, я решил использовать ls и расширение массива bash:

TEMP=( $( ls -ln FILE ) )
SIZE=${TEMP[4]}

это не очень хорошо, но, по крайней мере, он выполняет только 1 fork + execve и не полагается на вторичный язык программирования (perl / ruby ​​/ python / что угодно)

13
ответ дан 24 November 2019 в 03:19
поделиться

Ваш первый пример Perl не кажется мне необоснованным.

Именно по таким причинам я перешел от написания сценариев оболочки (в bash / sh и т. Д.) К написанию всего, кроме самые тривиальные скрипты на Perl. Я обнаружил, что мне нужно запускать Perl для определенных требований, и по мере того, как я делал это все чаще и чаще, я понял, что написание скриптов на Perl, вероятно, было более мощным (с точки зрения языка и широкого набора библиотек, доступных через CPAN ) и более эффективный способ достичь того, что я хотел.

Обратите внимание, что другие языки сценариев оболочки (например, python / ruby), несомненно, будут иметь аналогичные возможности, и вы можете оценить их для своих целей. . Я обсуждаю только Perl, так как это язык, который я использую и с которым я знаком.

2
ответ дан 24 November 2019 в 03:19
поделиться

Если вы используете find из GNU fileutils:

size=$( find . -maxdepth 1 -type f -name filename -printf '%s' )

К сожалению, другие реализации find обычно не поддерживает ни -maxdepth , ни -printf . Так обстоит дело, например, с Solaris и macOS find .

4
ответ дан 24 November 2019 в 03:19
поделиться