Страница 1 из 1

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

Добавлено: 2008-10-01 11:23:04
Happy_demon
Доброе время!
есть каталог /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
и на выходе уже получаю то, что нужно.
не подскажете, как сделать всё это одним файлом? можно и на перл, можно и на шелл. по крону чтобы этот файл можно было запускать.Заранее спасибо

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

Добавлено: 2008-10-01 11:53:28
zg

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

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# 

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

Добавлено: 2008-10-01 12:12:20
Happy_demon
:(
обратного слеша я так и не увидел на выходе, что собственно мне особенно важно. и скриптик этот лезет вглубину всех вложенных папок, что мне совсем уж не к чему.

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

Добавлено: 2008-10-01 14:17:20
zg
аа.. точно забыл :smile: глубину можно задать в параметрах find, а слеш подставить в выводе echo

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

Добавлено: 2008-10-03 19:16:11
major12
Так вставь регулярку прямо в 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";
}