The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"perl получить список каталогов и чутка его обработать"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"perl получить список каталогов и чутка его обработать"  
Сообщение от Happy_demon email(ok) on 01-Окт-08, 12:35 
Доброе время!
есть каталог /var/spool/mail в нем каталоги вида user@domen.ru, user2@domen.ru и т.д.
нужно получить файлик вида

>user@domen.ru /var/spool/mail/user\@domen.ru
>user2@domen.ru /var/spool/mail/user2\@domen.ru

пока делаю почти вручную, в 2 приёма

>#!/usr/bin/perl
>opendir (TEMPDIR,'/var/spool/mail') || die "Не могу открыть каталог : $!";
>@FILES=grep(!/^\.\.?/, readdir TEMPDIR);
>closedir(TEMPDIR);
>foreach (@FILES) {
>    $_="$_ /var/spool/mail/$_";
>    `echo "$_" >> /usr/handmade/mail_backup/111`;
>}

это первый заход. на выходе получаю файл 111 вида

>user@domen.ru /var/spool/mail/user@domen.ru
>user2@domen.ru /var/spool/mail/user2@domen.ru

т.е. без обратных слешей. потом запускаю второй файл

>#!/bin/sh
>sed 's/\(.*\)@/\1\\@/' 111 > vusers

и на выходе уже получаю то, что нужно.
не подскажете, как сделать всё это одним файлом? можно и на перл, можно и на шелл. по крону чтобы этот файл можно было запускать.Заранее спасибо

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "perl получить список каталогов и чутка его обработать"  
Сообщение от NuINu (??) on 01-Окт-08, 12:45 
>[оверквотинг удален]
>
>т.е. без обратных слешей. потом запускаю второй файл
>
>>#!/bin/sh
>>sed 's/\(.*\)@/\1\\@/' 111 > vusers
>
>и на выходе уже получаю то, что нужно.
>не подскажете, как сделать всё это одним файлом? можно и на перл,
>можно и на шелл. по крону чтобы этот файл можно было
>запускать.Заранее спасибо

А вы не пытались, выполнить ваше регулярное выражение s/\(.*\)@/\1\\@/;
перед тем как сделать нечто экзотическое с внешней командой echo ? :-)
почему не хотите пользоваться встроенными средствами перла для записи в файл?
операционки придеться на каждый ваш вывод!!! порождать процесс. как то не очень это хорошо выглядит.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "perl получить список каталогов и чутка его обработать"  
Сообщение от angra (ok) on 02-Окт-08, 01:16 
Мда, месье знает толк в извращениях.
$ perl -e 'chdir "/var/spool/mail/"; foreach (<*@*>) {print $_;s/@/\\@/;print " /var/spool/mail/$_\n";}'
user2@domen.ru /var/spool/mail/user2\@domen.ru
user@domen.ru /var/spool/mail/user\@domen.ru

Ну а дальше уже перенаправляйте вывод куда вам угодно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "perl получить список каталогов и чутка его обработать"  
Сообщение от Happy_demon email(ok) on 02-Окт-08, 09:19 
>Мда, месье знает толк в извращениях.

месье такой,месье знает)
Спасибо огромное!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "perl получить список каталогов и чутка его обработать"  
Сообщение от Andrey Mitrofanov on 02-Окт-08, 09:48 
>Доброе время!
>есть каталог /var/spool/mail в нем каталоги вида user@domen.ru, user2@domen.ru и т.д.
>нужно получить файлик вида
>
>>user@domen.ru /var/spool/mail/user\@domen.ru
>>user2@domen.ru /var/spool/mail/user2\@domen.ru

ls -1d /var/spool/mail/*@domen.ru |awk -v FS=/ '{print $NF" "$0}' >file.txt

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "perl получить список каталогов и чутка его обработать"  
Сообщение от phpcoder email(??) on 02-Окт-08, 13:32 
Я бы как-нибудь так сделал (не проверял):

find /var/spool/mail -maxdepth 1 -type d | while read D; do printf "%s %s" "$D" "$(echo $D | sed 's|@|\@|')"; done

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "perl получить список каталогов и чутка его обработать"  
Сообщение от Andrey Mitrofanov on 02-Окт-08, 14:11 
>Я бы как-нибудь так сделал (не проверял):
>
>find /var/spool/mail -maxdepth 1 -type d | while read D; do printf
>"%s %s" "$D" "$(echo $D | sed 's|@|\@|')"; done

Во-первых, у Вас ;) \n в printf пропущен, а во-вторых. -
...|while read D; do echo "${D//*\/} $D"; done

http://www.opennet.me/openforum/vsluhforumID1/82048.html
http://www.opennet.me/openforum/vsluhforumID1/81813.html

и далее везде: google.ru ENTER bash sed awk perl site:opennet.ru/openforum/ ENTER

Вот фокус c $NF в awk -- здесь в форуме и "подобрал". :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру