URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5299
[ Назад ]

Исходное сообщение
"Как выдать файлы в обратном порядке ?"

Отправлено XPurple , 30-Мрт-06 14:55 
Когда делаю cat logfile.log*|mail my, то файлы читаются в таком порядке logfile.log logfile.log.1 и т.д.
Соответсвенно, вначале выводятся записи за 30 число, потом за 29 и т.д.,что выглядит некрасиво.
Можно ли сделать так (с помощью регулярного выражения), чтобы файлы читались в обратном (неалфавитном) порядке, а в порядке создания: logfile.log.2 logfile.log.1 logfile.log?

Содержание

Сообщения в этом обсуждении
"Как выдать файлы в обратном порядке ?"
Отправлено skyogre , 30-Мрт-06 17:17 
>Когда делаю cat logfile.log*|mail my, то файлы читаются в таком порядке logfile.log
>logfile.log.1 и т.д.
>Соответсвенно, вначале выводятся записи за 30 число, потом за 29 и т.д.,что
>выглядит некрасиво.
>Можно ли сделать так (с помощью регулярного выражения), чтобы файлы читались в
>обратном (неалфавитном) порядке, а в порядке создания: logfile.log.2 logfile.log.1 logfile.log?

cat `ls -ltr | awk '{if($9 ne "") print $9}'` | mail user@example.com


"Как выдать файлы в обратном порядке ?"
Отправлено BigShadow , 31-Мрт-06 16:10 
а если так:

cat `ls -tr logfile.log.*` | mail user@example.com

?


"Как выдать файлы в обратном порядке ?"
Отправлено allez , 30-Мрт-06 17:42 
>Когда делаю cat logfile.log*|mail my, то файлы читаются в таком порядке logfile.log
>logfile.log.1 и т.д.
>Соответсвенно, вначале выводятся записи за 30 число, потом за 29 и т.д.,что
>выглядит некрасиво.
>Можно ли сделать так (с помощью регулярного выражения), чтобы файлы читались в
>обратном (неалфавитном) порядке, а в порядке создания: logfile.log.2 logfile.log.1 logfile.log?


for i in `ls logfile.log* | sort -nr`; do cat $i | mail my; done


"Как выдать файлы в обратном порядке ?"
Отправлено XPurple , 31-Мрт-06 06:10 
>for i in `ls logfile.log* | sort -nr`; do cat $i |
>mail my; done
Странно, но этот вариант не прошел.
А то, что предложил skyogre - прошел.
Спасибо -за помощь.

"Как выдать файлы в обратном порядке ?"
Отправлено allez , 31-Мрт-06 06:37 
>>for i in `ls logfile.log* | sort -nr`; do cat $i |
>>mail my; done
>Странно, но этот вариант не прошел.
>А то, что предложил skyogre - прошел.
>Спасибо -за помощь.

Действительно странно. Нельзя ли увидеть сообщения о возникших ошибках?


"Как выдать файлы в обратном порядке ?"
Отправлено BigShadow , 31-Мрт-06 16:16 
>>>for i in `ls logfile.log* | sort -nr`; do cat $i |
>>>mail my; done
>>Странно, но этот вариант не прошел.
>>А то, что предложил skyogre - прошел.
>>Спасибо -за помощь.
>
>Действительно странно. Нельзя ли увидеть сообщения о возникших ошибках?

Что вижу я.
Во-первых вместо одно письма получаем по письму на файл. Т.е. изначальная задача не выполняется :(
Во-вторых сортировка хоть и задается числовая, но выполняется она для строковых значений. И опять требуемый порядок следования файлов мы не получаем. Исправить можно заданием точки как раздилителя полей и реверсной числовой сортировкой по третьему полю. Но нужно ли? (см. первое замечание)


"Как выдать файлы в обратном порядке ?"
Отправлено allez , 01-Апр-06 17:13 
>Что вижу я.
>Во-первых вместо одно письма получаем по письму на файл. Т.е. изначальная задача
>не выполняется :(
Согласен. Виной тому - моя невнимательность. Необходимо объединить обрабатываемые в один
и уже его отправить по почте:
$ for i in `ls logfile.log* | sort -nr`; do cat $i >> log_for_mail; done; cat log_for_mail | mail my

>Во-вторых сортировка хоть и задается числовая, но выполняется она для строковых значений.
>И опять требуемый порядок следования файлов мы не получаем. Исправить можно
>заданием точки как раздилителя полей и реверсной числовой сортировкой по третьему
>полю. Но нужно ли? (см. первое замечание)
А вот тут позволю себе не согласиться. Указание опции -n заставляет команду sort
игнорировать в сортируемых строках "неподходящие" символы (то есть отличные от цифр,
разделителей целой и дробной частей и указателей знака числа). Вот тому пример:

$ touch file
$ touch file.1
$ touch file.2
$ touch file.3
$ ls file* | sort -nr
file.3
file.2
file.1
file

Для пущей наглядности можно несколько изменить условия задачи:

$ touch f1ile
$ touch fi2le
$ touch fil3e
$ ls f* | sort -nr
fil3e
fi2le
f1ile

Правда, должен оговориться, что я использовал GNU-версию sort (SuSE Linux 9.2 и 10.0, а
также FreeBSD 4.9); возможно, данная возможность существует только в ней...