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
.
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 для указания на это.
ls -lh
дает человекочитаемые размеры файла, длинный формат.
Это использует k, M, G, и суффиксы T (или никакой суффикс для байтов) по мере необходимости, таким образом, число остается маленьким, например. 1.4K
или 178M
.
-h
GNU coreutils расширение, не базовый POSIX.
Обратите внимание, что это не отвечает на вопрос точно, как спросили. Если Вы хотите размеры строго в мебибайт даже для маленьких или гигантских файлов, ответ Michael Kjörling делает это для GNU coreutils ls
.
h
намного легче записать, чем --block-size=M
– Ejaz
19.03.2017, 12:08
ls -l
вывод является неправильным способом сделать вещи, 99% времени. unix.stackexchange.com/questions/128985/why-not-parse-ls. То, что 1% щедр, и в значительной степени ограничен остротами, которые Вы пишете в интерактивном режиме для одноразового использования, не сценария, который Вы собираетесь использовать неоднократно на неизвестных именах файлов.
– Peter Cordes
22.02.2018, 23:03
И это опция для перечисления всего в каталоге в порядке возрастания размера файла (все еще удобочитаемого).
ls -lSrh
--block-size=M
причина aM
суффикс, который будет отображен рядом с размером, и можно использовать--block-size=1M
опустить его. Может стоить упомянуть также необходимость в GNU ls для того (самые невстроенные системы Linux будут иметь GNU ls). – Stéphane Chazelas 08.02.2013, 14:59ls
? Стандартls
не имеет такого аргумента. С xsi расширениемls
имеет-s
флаг, который заставляет его сообщить о количестве блоков, но нет никакого стандартного флага--block-size
. – kojiro 08.02.2013, 15:15--block-size
с coreutils 8.5, который является тем, что установлено на моем Debian, Сжимают систему. Так как вопрос был явно для Linux и не указывал ничто больше, я признаю, что принял пространство пользователя, центрируемое вокруг GNU coreutils. Я обновил ответ для разъяснения этого. (Кроме того, Open Group ls, кажется, не имеет-h также.:)
) – a CVn 08.02.2013, 15:34--block-size
расширение GNU. Я подозреваю, что Mac OS X не использует GNUls
. – a CVn 09.12.2017, 16:56