perl получить список каталогов и чутка его обработать

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Happy_demon
сержант
Сообщения: 194
Зарегистрирован: 2006-08-16 16:33:55
Откуда: Санкт-Петербург

perl получить список каталогов и чутка его обработать

Непрочитанное сообщение Happy_demon » 2008-10-01 11:23:04

Доброе время!
есть каталог /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 "Не могу открыть каталог /var/spool/mail: $!";
@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
и на выходе уже получаю то, что нужно.
не подскажете, как сделать всё это одним файлом? можно и на перл, можно и на шелл. по крону чтобы этот файл можно было запускать.Заранее спасибо

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: perl получить список каталогов и чутка его обработать

Непрочитанное сообщение zg » 2008-10-01 11:53:28

Код: Выделить всё

zg# cat 1.sh
#!/bin/sh

FOLDER=/var/spool/

for i in `find ${FOLDER} -type d`
do
  [ "$i" != "${FOLDER}" ] && echo -e "`basename \"$i\"`\t$i"
done
zg# ./1.sh
lock    /var/spool/lock
lpd     /var/spool/lpd
mqueue  /var/spool/mqueue
opielocks       /var/spool/opielocks
output  /var/spool/output
lpd     /var/spool/output/lpd
clientmqueue    /var/spool/clientmqueue
cups    /var/spool/cups
tmp     /var/spool/cups/tmp
samba   /var/spool/samba
zg# 

Happy_demon
сержант
Сообщения: 194
Зарегистрирован: 2006-08-16 16:33:55
Откуда: Санкт-Петербург

Re: perl получить список каталогов и чутка его обработать

Непрочитанное сообщение Happy_demon » 2008-10-01 12:12:20

:(
обратного слеша я так и не увидел на выходе, что собственно мне особенно важно. и скриптик этот лезет вглубину всех вложенных папок, что мне совсем уж не к чему.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: perl получить список каталогов и чутка его обработать

Непрочитанное сообщение zg » 2008-10-01 14:17:20

аа.. точно забыл :smile: глубину можно задать в параметрах find, а слеш подставить в выводе echo

major12
проходил мимо
Сообщения: 2
Зарегистрирован: 2008-06-27 0:56:30

Re: perl получить список каталогов и чутка его обработать

Непрочитанное сообщение major12 » 2008-10-03 19:16:11

Так вставь регулярку прямо в perl

Код: Выделить всё

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