Назад | Перейти на главную страницу

Безопасный способ определить размер файла с помощью инструментов unix?

Интересно, как лучше всего определить размер файла с помощью обычных инструментов unix. Мне нужно определить размер файла в байтах в сценарии оболочки. Проблема в том, что сценарий оболочки должен быть переносимым в разные операционные системы, такие как osx, irix, linux, в котором говорилось: использование команды "stat" может не работать должным образом, потому что аргументы, необходимые для получения желаемого результата, разные. почти во всех операционных системах.

Я пробовал использовать:

cat ... | wc -c

и хотя это, кажется, работает довольно хорошо, у меня, вероятно, будут проблемы в многобайтовой среде, не так ли? Итак: как это сделать?

cksum ФАЙЛ

Из википедия

Совместимость

Стандартная команда cksum, используемая в большинстве UNIX-подобных ОС (включая GNU / Linux, * BSD, Mac OS X и Solaris), использует алгоритм CRC, основанный на стандартной проверке кадров Ethernet, и поэтому совместима между реализациями.

конечно, совместимость упоминается для контрольной суммы, а НЕ для подсчета байтов.

Для этого можно использовать следующее:

du --block-size=1 filename

Я понятия не имею о его переносимости. На странице руководства по команде он указан как входящий в пакет GNU coreutils.

Если вы хотите определить размер файла, а не место, которое он занимает на диске, добавьте --apparent-size.

stat -c %s /path/to/filename

ls и awk довольно стандартные. Можешь попробовать

ls -l file | awk '{print $5}'
man wc

Печатать новую строку, слово и байт считает

user@machine:~$ ls -lh datefix.vim
-rw-r--r-- 1 user     group     264 2011-06-28 23:26 datefix.vim
user@machine:~$ wc datefix.vim
  6  12 264 datefix.vim
user@machine:~$ wc datefix.vim | awk '{print $3}'
264

wc не знает и не заботится о Unicode - он думает, что байт является байтом. Я также проверил это на файле .lzma размером 234 МБ, чтобы доказать это ... так что простой wc -c также даст вам то, что вы хотите.