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


161

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

ls -la

Ответы:


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, он печатает размеры в удобочитаемом формате


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

Обратите внимание, что здесь не отображаются десятичные знаки . Кроме того, все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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.