From: "Михаил Шувалов" <mike@shuvaloffs.org> To: ALT Linux Community general discussions <community@lists.altlinux.org>, ALT Linux sysadmin discuss <sysadmins@lists.altlinux.org> Subject: [Comm] CP1251 и фильтры в procmail Date: Tue, 19 May 2009 17:50:32 +0400 Message-ID: <cec9a9c50905190650q1d4b0da4yf4aeffa91f3a9a4d@mail.gmail.com> (raw) Добрый день! Извините за кросспост, но срочно нужно решить проблема. Почта принимается fetchmail, далее обрабатывается фильтрами в gprocmail и копия письма кладется в ящик. Все бы ничего, но некоторые файлы приходят с кириллицей в именах. Сами файлы представляют собой rar архив в котором файл с таким же именем. Нужно вытащить из письма этот файл, сохранить его, проанализировать имя файла, содержашее дату, извлечь из архива файл и положить в предварительно созданную папку. Если в имени файла латиница - все нормлаьно, а вот с кирилицей засада. Привожу фильтр и обрабатывающиескрипты: фильтр procmail: :0 HBc * ^From.*<e-mail> * ^Content-Disposition: attachment; | /home/RcvReestr/GetArcAMK Скрипты: ========================================================================================================= $ cat /home/RcvReestr/GetArcAMK #!/bin/sh # корневая папка, где находятся все скрипты и подкаталоги с полученными архивами RootPath=/home/RcvReestr export LANG=ru_RU.UTF-8 export LC_CTYPE="ru_RU.UTF-8" export LC_NUMERIC="ru_RU.UTF-8" export LC_TIME="ru_RU.UTF-8" export LC_COLLATE="ru_RU.UTF-8" export LC_MONETARY="ru_RU.UTF-8" export LC_MESSAGES="ru_RU.UTF-8" export LC_PAPER="ru_RU.UTF-8" export LC_NAME="ru_RU.UTF-8" export LC_ADDRESS="ru_RU.UTF-8" export LC_TELEPHONE="ru_RU.UTF-8" export LC_MEASUREMENT="ru_RU.UTF-8" export LC_IDENTIFICATION="ru_RU.UTF-8" export LC_ALL= # логфайл LogFile=${RootPath}/GetArcAMK.log echo `date +"%d.%m.%Y %H:%M:%S"`"--- start script ---">>$LogFile # ---------======= Пути ======------------ # куда помещаем для обработки полученные архивы AllFile=/home/RcvReestr/ALL/AMK /usr/bin/ripmime -i - -d "$AllFile" rm -f ${AllFile}/text* for i in $AllFile/*.rar do echo `date +"%d.%m.%Y %H:%M:%S"` "start of reestrAMK $i ">>$LogFile $RootPath/reestrAMK $i done # очищаем папку rm -f ${AllFile}/*.* echo `date +"%d.%m.%Y %H:%M:%S"`"--- stop script ---">>$LogFile echo >>$LogFile ============================================================================================== $ cat /home/RcvReestr/reestrAMK #!/bin/sh export LANG=ru_RU.UTF-8 export LC_CTYPE="ru_RU.UTF-8" export LC_NUMERIC="ru_RU.UTF-8" export LC_TIME="ru_RU.UTF-8" export LC_COLLATE="ru_RU.UTF-8" export LC_MONETARY="ru_RU.UTF-8" export LC_MESSAGES="ru_RU.UTF-8" export LC_PAPER="ru_RU.UTF-8" export LC_NAME="ru_RU.UTF-8" export LC_ADDRESS="ru_RU.UTF-8" export LC_TELEPHONE="ru_RU.UTF-8" export LC_MEASUREMENT="ru_RU.UTF-8" export LC_IDENTIFICATION="ru_RU.UTF-8" export LC_ALL= # Создаем логфайл, если он не существует. LF=/home/RcvReestr/`basename $0`.log if [ ! -f $LF ] then touch $LF fi echo `date +"%d.%m.%Y %H:%M:%S"` Start>>$LF # В качестве параметра должен передаваться архивный файл (*.rar) if [ $# -lt 1 ] then echo "Строка запуска: $0 <filename>" echo "Строка запуска: $0 <filename>">>$LF exit fi # Подпапка с реестрами CTLGNAME=AMK/FIL/ EXT=.rar RCVPATH=/home/RcvReestr/ALL/AMK/ SRCPATH=/home/RcvReestr/$CTLGNAME # Если не подмонтирована папка, то монтируем mnt=$"`mount | grep SERVER`" [ "$mnt" ] || sudo ncpmount -S SERVER -U user -P password -m -u 500 -y utf8 -p cp866 /mnt/SERVER DSTPATH=/mnt/SERVER/pub/tsr/reestr/$CTLGNAME FN=`basename $1` if [ ! -f $RCVPATH$FN ] then echo "Отсутствует файл" echo "Отсутствует файл">>$LF exit fi FN=`basename $FN $EXT` # Получаем дату реестра из имени файла SPY=`expr $(echo "len($FN)" | m4) - 8` SPM=`expr $(echo "len($FN)" | m4) - 4` SPD=`expr $(echo "len($FN)" | m4) - 2` y=`echo "substr($FN,$SPY,4)" | m4` m=`echo "substr($FN,$SPM,2)" | m4` d=`echo "substr($FN,$SPD,2)" | m4` # Определяем номер филиала FIL=`echo "substr($FN,0,2)" | m4` # Куда помещаем полученный архив SP=$SRCPATH$FIL/$y/$m/$d/ # Куда разархивируем реестры DP=$DSTPATH$FIL/$y/$m/$d/ if [ ! -d $SP ] then mkdir -p $SP fi if [ ! -d $DP ] then mkdir -p $DP fi unrar e -y ${RCVPATH}${FN}${EXT} ${DP}>>${LF} mv ${RCVPATH}${FN}${EXT} ${SP} echo `date +"%d.%m.%Y %H:%M:%S"` --- Stop --->>$LF echo "">>$LF ===================================================================================================== -- С уважением, Михаил Шувалов
reply other threads:[~2009-05-19 13:50 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=cec9a9c50905190650q1d4b0da4yf4aeffa91f3a9a4d@mail.gmail.com \ --to=mike@shuvaloffs.org \ --cc=community@lists.altlinux.org \ --cc=sysadmins@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Community general discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 community community/ http://lore.altlinux.org/community \ mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com public-inbox-index community Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.community AGPL code for this site: git clone https://public-inbox.org/public-inbox.git