1

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

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

Пробую

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

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

Debian Wheezy

2

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

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

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

Да, у меня Ubuntu.
Нет, не глючит.

3

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

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

95% процентов проблем находятся между клавиатурой и стулом.

4

Fat-Zer⇓ пишет:

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

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

Debian Wheezy

5

-=Serj=-⇓ пишет:

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

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

Debian Wheezy

6

giko⇓ пишет:

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

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

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

95% процентов проблем находятся между клавиатурой и стулом.

7

Короче ),

#!/usr/bin/env python

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

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

Да, у меня Ubuntu.
Нет, не глючит.

8

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

Debian Wheezy