LinuxForum.Fans
Тема

Экранирование пробелов в выводе ls

Автор: giko 8 сообщений 4869 просмотров
#322304

Здравствуйте, задача - получить список файлов командой ls в формате

text

<name>  <size>
<name>  <size>

Пробую

text
ls -l | awk '{print $9"\t"$5}'

и все вроде бы работает, но если в имени файла попадается пробел - awk его учитывает и вывод портится
Как поступить? Заранее благодарю!

#322317

Я не знаток awk, так что за красоту не ручаюсь ) В лоб:

text

$ ls -l | awk '{for (i=9; i<=NF; i++) printf $i" "; print "\t"$5}'

ЗЫ. Табуляцию лучше заменить на форматированный вывод.

#322321

можно проще:
ls | xargs stat -c "%n %s"

если надо быстрее, то ls можно заменить на find или ls -f

#322366
"Fat-Zer⇓" написал:
можно проще:
ls | xargs stat -c "%n %s"

Как не странно - не работает!
Реакция на пробелы такая же как и у awk) Воспринимает каждую часть имени как отдельный файл

#322367
"-=Serj=-⇓" написал:
Я не знаток awk, так что за красоту не ручаюсь ) В лоб:

Всё бы хорошо... Но в конце файла отдает лишний пробел) Не хочется делать еще один костыль, может есть решение?

#322371
"giko⇓" написал:
Как не странно - не работает!Реакция на пробелы такая же как и у awk) Воспринимает каждую часть имени как отдельный файл

укажи разделитель сам:
ls | xargs -d '\n' stat -c "%n %s"

к знающим: xargs всегда использовал по дефолту в качестве разделителя все пробелы о_О? а то, кажись, я чего-то очень туплю сегодня....

#322401

Короче ),

text

#!/usr/bin/env python

import os for name in os.listdir('.'): print '%s\t%s' % (name, os.stat(name).st_size)

Выдаст то, что вам нужно в текущей директории.

#322404

Оба решения работают, всем огромное спасибо!
Проблема решена!

Войдите или зарегистрируйтесь, чтобы ответить.