Интересно, как лучше всего определить размер файла с помощью обычных инструментов 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
также даст вам то, что вы хотите.