Как я заставляю 'ls' показать размеры файла в мегабайтах?

f=open("filename","r") 

a=[]

for line in f:

    if line[-1:]=='\n':
        line=line[:-1]

    a=line.split("ASDFASDF22")

    a.insert(1,"ASDFASDF22")

    a.insert(len(a)-1,"ASDFASDF22")

    k1=len(a[2])

    if k1 > 50:
        k2=k1-50
        k2=k2+1
        a[2]=a[2][:-k2]
        for i in a:
            print i,
    else:
        k2=50-k1
        for i in range(0,len(a)):
            if i !=2:
                print a[i],
            else:
                for j in range(0,k2):
                    a[2]=a[2]+" "
                print a[2],
    print ""`

Это - наивная реализация в Python. Сохраните это как filename.py и дайте python filename.py.

487
08.02.2013, 11:37
4 ответа

ls -l --block-size=M даст Вам список длинных форматов (должен был на самом деле видеть размер файла), и круглые размеры файла до ближайшего мебибайт.

Если Вы хотите МБ (10^6 байты), а не мебибайт (2^20 байты) единицы, использовать --block-size=MB вместо этого.

Если Вы не хотите M суффикс присоединил к размеру файла, можно использовать что-то как --block-size=1M. Благодарен за то, что Stéphane Chazelas предлагает это.

Если Вы просто хотите размеры файла в "разумных" единицах, а не конкретно мегабайты, то можно использовать -lh получить список длинных форматов и человекочитаемую презентацию размера файла. Это будет использовать единицы размера файла для хранения размеров файла представленными приблизительно с 1-3 цифрами (таким образом, Вы будете видеть размеры файла как 6.1K, 151K, 7.1M, 15M, 1.5G и так далее.

--block-size параметр описан в странице справочника для ls; man ls и поиск SIZE. Это допускает единицы кроме МБ/мебибайт также, и от взглядов его (я не попробовал это), произвольные размеры блока также (таким образом, Вы видели размер файла как многие 429-байтовые блоки, если Вы хотите к).

Отметьте это оба --block-size и -h расширения GNU сверху Open Group ls, таким образом, это не может работать, если у Вас нет пространства пользователя GNU (который большинство установок Linux делает). ls от GNU Coreutils 8.5 действительно поддерживает - размер блока и-h, как описано выше. Благодаря kojiro для указания на это.

555
27.01.2020, 19:28
  • 1
    различие, которое, возможно, стоит заметить: --block-size=M причина a M суффикс, который будет отображен рядом с размером, и можно использовать --block-size=1M опустить его. Может стоить упомянуть также необходимость в GNU ls для того (самые невстроенные системы Linux будут иметь GNU ls). –  Stéphane Chazelas 08.02.2013, 14:59
  • 2
    Был бы это быть GNU ls? Стандарт ls не имеет такого аргумента. С xsi расширением ls имеет -s флаг, который заставляет его сообщить о количестве блоков, но нет никакого стандартного флага --block-size. –  kojiro 08.02.2013, 15:15
  • 3
    @kojiro GNU ls ответа действительно имеет --block-size с coreutils 8.5, который является тем, что установлено на моем Debian, Сжимают систему. Так как вопрос был явно для Linux и не указывал ничто больше, я признаю, что принял пространство пользователя, центрируемое вокруг GNU coreutils. Я обновил ответ для разъяснения этого. (Кроме того, Open Group ls, кажется, не имеет-h также. :)) –  a CVn 08.02.2013, 15:34
  • 4
    @EmanuelBerg, 1000^7 (10^21) больше, чем 2^64 (который является ~10^19.27), –  Stéphane Chazelas 10.02.2013, 12:17
  • 5
    @Tom, Как это говорит в заключительном абзаце ответа, --block-size расширение GNU. Я подозреваю, что Mac OS X не использует GNU ls. –  a CVn 09.12.2017, 16:56

ls -lh дает человекочитаемые размеры файла, длинный формат.

Это использует k, M, G, и суффиксы T (или никакой суффикс для байтов) по мере необходимости, таким образом, число остается маленьким, например. 1.4K или 178M.

-h GNU coreutils расширение, не базовый POSIX.

Обратите внимание, что это не отвечает на вопрос точно, как спросили. Если Вы хотите размеры строго в мебибайт даже для маленьких или гигантских файлов, ответ Michael Kjörling делает это для GNU coreutils ls.

426
27.01.2020, 19:28
  • 1
    , Который распечатает размеры файла в ГБ для чего-либо большего, чем чуть менее чем 1,0 гибибайта (я верю). –  a CVn 08.02.2013, 10:36
  • 2
    @MichaelKjörling материала, я не рассматриваю его как плохой ответ (хотя я не сделал upvote). Иногда OP не делает слова вопрос точно, как они должны так, было возможно, что они просто хотели человекочитаемый вывод и вместо этого формулировали это как "в МБ". –  Dason 08.02.2013, 16:33
  • 3
    Upvoted. "Это не отвечает (МБ), вопросом" является совершенно допустимый оператор, но этот ответ только увеличил полноценность этой страницы SO, так как этот ответ находится в том же контексте. Я только достиг этой страницы, ища решение универсальных "выставочных дат в человекочитаемой форме" требование и h намного легче записать, чем --block-size=M –  Ejaz 19.03.2017, 12:08
  • 4
    довольно нелеп. Кто использует ls -l вообще, если не люди? :p –  phil294 09.05.2017, 17:17
  • 5
    @chengyang: парсинг ls -l вывод является неправильным способом сделать вещи, 99% времени. unix.stackexchange.com/questions/128985/why-not-parse-ls. То, что 1% щедр, и в значительной степени ограничен остротами, которые Вы пишете в интерактивном режиме для одноразового использования, не сценария, который Вы собираетесь использовать неоднократно на неизвестных именах файлов. –  Peter Cordes 22.02.2018, 23:03

ls -lhS сортировать по размеру в удобочитаемом формате

50
27.01.2020, 19:28

И это опция для перечисления всего в каталоге в порядке возрастания размера файла (все еще удобочитаемого).

ls -lSrh
12
27.01.2020, 19:28

Теги

Похожие вопросы