ls-команда: как отобразить размер файла в мегабайтах?

161

В Unix (Tru64), как заставить lsкоманду показать размер файла в мегабайтах? В настоящее время я могу показать его в байтах, используя следующее:

ls -la
phuclv
источник

Ответы:

247

Может быть -h, вам достаточно

-h
При использовании с параметром -l используйте суффиксы единиц измерения: байты, килобайты, мегабайты, гигабайты, терабайты и петабайты, чтобы уменьшить количество цифр до трех или менее, используя основание 2 для размеров.

ls -lah

Общий совет: Используйте man commandnameдля чтения руководства / справки по определенной команде, например, здесь man ls.

Феликс
источник
1
Спасибо, но опция -h не существует в Tru64 Unix.
8
Общий совет: установите утилиты GNU ...
reinierpost
22
Мне нравится ваш совет по использованию man, но на самом деле, поиск в Google намного быстрее, чем при использовании man в большинстве случаев (как сейчас, когда я нашел этот результат в Google).
trusktr
4
Google подойдет и для общих советов, но, в конечном счете, справочные страницы относятся к системе / ОС, даже к хосту, обычно создаются при компиляции или установке программного обеспечения и, таким образом, являются авторитетными для программного обеспечения в конкретной системе.
Невин Уильямс
1
Просто чтобы пройти полный круг, есть человек онлайн для gnu / linux: linux.die.net/man
MariusMatutiae
32

ls --block-size=Mпечатает размеры в мегабайтах, но показывает 1 МБ также для всего, что меньше 1 МБ. Я не уверен, что эта опция приемлема в вашей UNIX-версии ls.

На самом деле ls -lhтакже печатает размеры в гигабайтах, если файл достаточно большой (ну в любом случае: в Linux 64bit это работает:>)

На боковом узле: du -sh *печатает также размеры каталога в текущем каталоге.

Январь
источник
Спасибо! Мне нужно было отслеживать изменения файла в папке в реальном времени, и использование ls -hстановится бессмысленным после того, как while true ; do ls -al --block-size=M ; sleep 1 ; done
размер
15

Вам придется использовать, awkчтобы сделать математику для вас:

ls -l | awk 'BEGIN{mega=1048576} $5 >= mega {$5 = $5/mega "MB"} {print}'

Это не повлияет на вывод для файлов, которые меньше, чем mega.

Возможно, вам придется настроить номер поля в соответствии с тем, как вы lsвыложены. Вы можете изменить megaна «1000000», если это ваше предпочтение.

Это напечатает больше десятичных разрядов, чем вы, вероятно, хотите. Вы могли бы реализовать функцию округления.

Деннис Уильямсон
источник
3
Гораздо менее элегантно, чем ls -lhили ls --block-size=M, но AWK очень полезен!
Статвонк
Как раз то, что мне было нужно. Все остальные решения округляются до ближайшего МБ, но это показывает несколько знаков после запятой и легко настраивается.
0
3
Это хорошее решение для тех систем (AIX - я смотрю на вас), у которых нет опции -h.
Buggabill
14

попробуйте ls -shRрекурсивный читабельный формат.

сортировщик
источник
4
OP заявил, что нет -hна Tru64 , и сделал это в течение двух лет, прежде чем этот ответ был опубликован.
CVN
3
Мысль Это моя обязанность, чтобы помочь тем, кто достигает здесь с тем же поиском в Google.
Сортировщик
8

попробуй ls -lash, он печатает размеры в удобочитаемом формате

n0pe
источник
5

du -sm filename.txt

простой эфир
источник
1
он всегда округляется до размера ... если размер меньше 1 МБ, скажем, 500K, то он также напечатает 1M
AnonGeek
5

Вы также можете ввести

du -sh ./*

При этом будут перечислены все папки в текущем каталоге в удобочитаемом формате, включая более привычные размеры файлов в килобайтах, мб, гб.

Кенг
источник
2

Если вам нужен только размер определенного файла, тогда команда, тривиальная экстраполяция предыдущих ответов, выглядит так:

ls -sh имя файла (ов)

-sпредназначен для размера, а hдля человека удобочитаем (как упоминалось выше несколько раз).

Вывод будет выглядеть так:

753M myfilename

Если вы пропустите имя файла (ов), он перечислит каталог, поместив размер каждого файла рядом с его именем - в отличие от того, что ls -laпроисходит, когда вызывается без аргументов имени файла.

Надеюсь это поможет.

Роб Джонс
источник
2
Этот вопрос касается Tru64 Unix, и ОП почти пять лет назад заявил, что эта -hопция не существует в lsэтой системе.
G-Man
2
ls -l --block-size=MB 

Для --block-sizeпараметра:

  • использовать MBдля 10 ^ 6
  • использовать только Mдля 2 ^ 20
Evan
источник
Обратите внимание, что здесь не отображаются десятичные знаки . Кроме того, все1MB , что выше 0 кБ, но не больше 1 МБ, будет показано как . По этой причине я нашел ls -l --block-size=kBболее полезным.
DaAwesomeP
0

Если вас просто интересует размер файла, и вам не нужно использовать lsкоманду, попробуйте следующее:

# echo "Hello World" > file.txt
# ls -l file.txt 
-rw-r--r-- 1 user user 12 Mar 10 11:32 file.txt
# stat --printf='%s\n' file.txt
12

Это напечатает размер файла без необходимости разбора чего-либо.

СКН
источник
OP хочет размер в мегабайтах, может быть, параметр stat даст размер в удобочитаемой форме?
Archemar
Ах, это было глупо с моей стороны. Спасибо, что поймали это. Насколько мне известно, stat не имеет возможности манипулировать размером с помощью --printf или любого другого параметра. Скорее всего, потребуется использовать утилиты командной строки printf и bc. В каком случае зачем? ls и cut / awk будут быстрее.
SKN