Как узнать размер файла в МБ в командной строке UNIX?
Если ваш ls
поддерживает --block-size
такие как GNU coreutils ls
делает:
ls -s --block-size=1048576 filename | cut -d' ' -f1
du -h file
ls -lh file
РЕДАКТИРОВАТЬ
этот ответ неверен, поскольку он может сообщать размер также в Гб / Кб, в зависимости от размера файла. Удалите положительные голоса.
Я обычно использую 'du -k myfile', чтобы получить килобайты и визуально опустить последние три цифры, но я просто ищу приблизительный размер.
Оказывается, du часто (всегда?) Имеет параметр -m для MB.
Имейте в виду, что размер файла, вероятно, немного отличается от объема используемого дискового пространства, поскольку распределение на диске происходит блоками, а не байтами.
Если вы ищете «толстые» файлы из-за нехватки места на диске, это будет более поучительный вопрос, поскольку решения будут более разнообразными.
использование опции -lh предоставит вам размеры в удобочитаемой форме, например, если ваш файл имеет размер 1025 M, он будет выводить 1 ГБ, в противном случае вы можете использовать ls --block-size = 1024K -s, он даст размер в ближайшем целом числе в МБ .
Если вам нужны точные значения (а не округленные), вы можете использовать awk:
ls -l | awk '/d|-/{printf("%.3f %s\n",$5/(1024*1024),$9)}'
stat
может это сделать.
$ ls -l | grep myfile
-rw------- 1 rory rory 3120 2009-07-02 16:58 myfile
$ stat -c '%s' myfile
3120
которые дают вам это в байтах.
Вы можете использовать арифметику bash для вычисления мегабайт:
$ echo $(( $( stat -c '%s' myfile ) / 1024 / 1024 ))
0
(но в данном случае округляет его в меньшую сторону)
Я нашел лайнер AWK 1, и в нем была ошибка, но я ее исправил. Я также добавил в PetaBytes после TeraBytes.
FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
Учитывая стат не в каждой системе, вы почти всегда можете использовать решение AWK. Пример; у Raspberry Pi нет стат но у него есть awk.
Вы можете использовать крошечный скрипт Python:
$ cat ./size_in_mb.py
#!/usr/local/bin/python
import os
import sys
print os.path.getsize(sys.argv[1])/1048576
$ ls -l test.tgz
-rw-r--r-- 1 root root 258330336 Jul 7 00:04 test.tgz
$ ./size_in_mb.py test.tgz
246
Я видел это в другой ветке, и мне понравились результаты. Под AIX я использовал
ls -l [filename] | awk '{$5=sprintf("%.3f GB", $5/1024^3)} 1'
Производит количество ГБ с 3 десятичными знаками
Пример вывода
ls -l /tmp/myfile:
-rw-rw-rw- 1 owner group 0.530 GB Jul 8 10:33 /tmp/myfile
Вы можете увеличить десятичный счетчик, если размер файла меньше 1 МБ. Приведенный выше пример с использованием% .9f вместо этого даст:
0.530388314 GB
Попробуйте этот пример:
size=$(du file | awk '{print $1/1000}')
echo "the size is ${size} MB"