LINUX.ORG.RU

Вопрос по оптимизации скрипта


0

0

Субж. Набросал скрипт для проверки последнего дельта-синка (ибо то, что лежит на вики джентушной, не работает - заточено под emerge --sync), но он выполняется почти по пол-секунды О_о 
Опыта написания скриптов особого нету, потому выглядит ugly =) Надеюсь на помощь

#!/bin/bash
#Little dirty hack made to get last syncdate over delta-webrsync
#By Max aka rebarned, 2007
fname=`locate portage-*.tar.bz2 | sed "/md/d" | sed "/[0-9]\.[0-9]/d" | sed "/manpages/d" | xargs basename`
date=`echo ${fname:8:8}`
day=`echo ${date:(-2)}`
month=`echo ${date:(-4):2}`
year=`echo ${date:0:4}`
echo ${day}.${month}.${year}

Скрипт пытается найти файл дерева портежей и вытаскивает из него дату, представляя ее в удобоваримом формате. Изначально вывод locate portage-*.tar.bz2 выглядит так

/usr/portage/distfiles/portage-2.0.54.tar.bz2
/usr/portage/distfiles/portage-manpages-1.2.tar.bz2
/usr/portage/distfiles/portage-2.1-r2.tar.bz2
/usr/portage/distfiles/portage-utils-0.1.18.tar.bz2
/usr/portage/distfiles/portage-20060822.tar.bz2.umd5sum.1
/usr/portage/distfiles/portage-20060822.tar.bz2.umd5sum.2
/usr/portage/distfiles/portage-utils-0.1.20.tar.bz2
/usr/portage/distfiles/portage-2.1.1.tar.bz2
/usr/portage/distfiles/portage-20061027.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061101.tar.bz2.md5sum
/usr/portage/distfiles/portage-20061028.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061103.tar.bz2.md5sum
/usr/portage/distfiles/portage-20061105.tar.bz2.md5sum
/usr/portage/distfiles/portage-20061104.tar.bz2.md5sum
/usr/portage/distfiles/portage-20061107.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061110.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061111.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061112.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061114.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061116.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061117.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20061225.tar.bz2.umd5sum
/usr/portage/distfiles/portage-manpages-20060913.tar.bz2
/usr/portage/distfiles/portage-20070124.tar.bz2.umd5sum
/usr/portage/distfiles/portage-2.1.2.tar.bz2
/usr/portage/distfiles/portage-20070125.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070128.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070130.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070131.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070202.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070203.tar.bz2.umd5sum
/usr/portage/distfiles/portage-utils-0.1.23.tar.bz2
/usr/portage/distfiles/portage-20070211.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070212.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070214.tar.bz2
/usr/portage/distfiles/portage-20070213.tar.bz2.umd5sum
/usr/portage/distfiles/portage-20070214.tar.bz2.md5sum
/usr/portage/distfiles/portage-20070214.tar.bz2.umd5sum

Более человечного ничего не придумал =( Надеюсь на коллективный разум

Ответ на: комментарий от sdio

Это выдача манпэйджа, а нужен portage-[[:digit:]]*8 =( В данном случае /usr/portage/distfiles/portage-20070214.tar.bz2... За объяснение регэкспа буду благодарен =)

rebarned
() автор топика
Ответ на: комментарий от sdio

Объяснять лень, но вот на перле прозрачнее получается:

locate portage-*.tar.bz2 | perl -ne 'print "$3.$2.$1\n" if (!/md|\d\.\d/ && /^.*portage-(\d{4})(\d{2})(\d{2}).*/);'

sdio ★★★★★
()

> date=`echo ${fname:8:8}`
> day=`echo ${date:(-2)}`
> month=`echo ${date:(-4):2}`
> year=`echo ${date:0:4}`

из того что бросается в глаза:

xxx=`echo $yyy`

нужно заменить на:

xxx="$yyy"



dilmah ★★★★★
()
Ответ на: комментарий от dilmah

ну а вообще у тебя основнеое вреся на locate тратится -- так что оптимизировать большого смысла нет. Полсекунды это нормально

dilmah ★★★★★
()

Пока сделал так:

fname=`ls /usr/portage/distfiles/portage-200* | sed "/md/d" | xargs basename`
date=${fname:8:8}
day=${date:(-2)}
month=${date:(-4):2}
year=${date:0:4}
echo ${day}.${month}.${year}

Грязный хак, но отрабатывает за 0.0060sec user-time =)

rebarned
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.