ls-command: як відобразити розмір файлу в мегабайтах?


161

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

ls -la

Відповіді:


247

Можливо, -hвам достатньо:

-h
Якщо використовується параметр -l, використовуйте одиничні суфікси: Байт, Кілобайт, Мегабайт, Гігабайт, Терабайт і Петабайт, щоб зменшити кількість цифр до трьох або менше, використовуючи основу 2 для розмірів.

ls -lah

Загальна порада: Використовуйте man commandnameдля читання посібника / довідки певної команди, наприклад тут man ls.


1
Дякую, але, схоже, на Tru64 Unix варіант -h, здається, не існує.

8
Загальна порада: встановіть утиліти GNU ...
reinierpost

22
Мені подобається ваша порада щодо використання людини, але насправді пошук в Google набагато швидше, ніж багато разів користуватися людиною (як зараз, коли я знайшов цей результат в Google).
trusktr

4
Штрафи від Google і все для загальних підказок, але в кінцевому підсумку довідкові сторінки - це система / ОС, навіть конкретні хости, що зазвичай створюються під час компіляції або встановлення програмного забезпечення та, таким чином, авторитетні для програмного забезпечення вашої конкретної системи.
Невін Вільямс

1
Тільки щоб прийти до повного кола, є людина в мережі для gnu / linux: linux.die.net/man
MariusMatutiae

32

ls --block-size=Mдрукує розміри в Мегабайт, але показує 1 Мб також для всього, що не перевищує 1 Мб. Я не впевнений, що цей варіант є прийнятним у вашій версії l-файлу UNIX.

Насправді ls -lhтакож друкує розміри в Гігабайти, якщо файл достатньо великий (Ну і все одно: в Linux 64bit це працює:>)

На бічному вузлі: du -sh *друкує також розміри каталогів у поточному каталозі.


Дякую! Мені потрібно було стежити за змінами файлів, які перебувають у реальному часі, і використовувати ls -hбезглуздо, коли файл зростає понад 1 Гб, тому я використовую цю команду в циклі 1 секунди:while true ; do ls -al --block-size=M ; sleep 1 ; done
ccpizza

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 дуже корисний!
Statwonk

Тільки те, що мені було потрібно. Всі інші рішення округлюються до найближчого МБ, але це показує кілька десяткових знаків і легко настроюється.
zeroimpl

3
Це хороше рішення для тих систем (AIX - я дивлюся на вас), у яких немає можливості -h.
Buggabill

14

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


4
ОП заявило, що немає -hна Tru64 , і зробило це за два роки до опублікування цієї відповіді.
CVn

3
Думав, що я відповідаю за те, щоб допомогти тим, хто дістається сюди, таким же пошуком Google.
Сортер

8

спробуйте ls -lash, він друкує розміри у читаному для людини форматі



5

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

du -sh ./*

Тут буде перераховано всі папки в поточному каталозі з читаним людиною форматом, включаючи більш звичні розміри файлів у Kb, Mb, Gb.


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 видасть розмір у читаному для людини вигляді?
Архемар

Ах, це було від мене німим. Дякуємо, що це зробили. stat не має можливості маніпулювати розміром, використовуючи --printf або будь-який інший варіант, наскільки я знаю. Ймовірно, зажадає використання комбінації утиліт командного рядка printf та bc. У такому випадку, навіщо турбуватися. ls і скоротити / awk було б швидше.
СКН
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.