2013-03-29 3 views
0

Так что я собираюсь здесь сделать, чтобы определить последнюю стабильную версию TuxOnIce от http://tuxonice.net/downloads/all/ (в настоящее время tuxonice-for-linux-3.8.0-2013-02-24.patch.bz2).Как определить последнюю стабильную версию TuxOnIce как можно более компактно

Что усложняет дело в том, что нет «тока» ссылки, так что мы должны следовать за версиями, который что-то подобное (они не существуют):

tuxonice-for-linux-3.8.0-2013-4-2.patch.bz2 
tuxonice-for-linux-3.8-4-2013-4-16.patch.bz2 
tuxonice-for-linux-3.8-11-2013-5-23.patch.bz2 

Проблема заключается в том, что они собираются быть в этом порядке:

tuxonice-for-linux-3.8-11-2013-5-23.patch.bz2 
tuxonice-for-linux-3.8-4-2013-4-16.patch.bz2 
tuxonice-for-linux-3.8.0-2013-4-2.patch.bz2 

Мое текущее заполнение (это мусор) - это. Я думал об использовании даты, но не мог понять, как это сделать, либо (/tmp/tuxonice это индексный файл):

_major=3.8 # Auto-generated 
_TOI=$(grep ${_major}-1[0-9] /tmp/tuxonice | cut -d '"' -f2 | tail -1) 
[ ! $_TOI ] && _TOI=$(grep ${_major}- /tmp/tuxonice | cut -d '"' -f2 | tail -1) 
[ ! $_TOI ] && _TOI=$(grep ${_major}.0-2 /tmp/tuxonice | cut -d '"' -f2 | tail -1) 

Спасибо.

ответ

1

Используйте функцию Веба-сервера для сортировки индексной страницы по дате изменений в обратном порядке, возьмите страницу с помощью lynx -dump, получить первую строку, соответствующее имя файла вы заинтересованы в и напечатайте соответствующий столбец. Это дает вам абсолютный URL-адрес файла, оттуда вы можете настроить команду, чтобы дать вам точный результат, который вы хотите (имя файла, только строка версии, ...).

$ lynx -dump 'http://tuxonice.net/downloads/all/?C=M&O=D'|awk '/^[[:space:]]*[[:digit:]]+\..+\/tuxonice-for-linux/ { print $2; exit }' 
http://tuxonice.net/downloads/all/tuxonice-for-linux-3.8.0-2013-02-24.patch.bz2 

Еще не супер-прочный и, очевидно, будет перерыв, если даты модификации не как ожидалось, и вы, вероятно, также хотите настроить регулярное выражение немного, чтобы быть более точным.

+0

Не могли бы вы рассчитать индекс по датам. Таким образом, пока не будет никаких других выпусков для одного и того же ядра, просто 'grep $ {_ major}/tmp/tuxonice | cut -d '"' -f2 | head -1' будет (предшествует' curl -s "http://tuxonice.net/downloads/all/?C=M&O=D" -o/tmp/tuxonice') – Det

+1

Если вам интересно, проверьте [документацию Apache по mod_autoindex] (http://httpd.apache.org/docs/2.2/mod/mod_autoindex.html#query) для возможных аргументов сортировки и формата (Apache). Очевидно, что это будет работать до тех пор, пока они будут придерживаться веб-сервера, который поддерживает сортировку по URL-адресу (не многие из них). –

+0

Конечно, 'grep -m1' даже лучше, чем' | head -1'. от этого сейчас. – Det

0

Это не реальный ответ, но я подумал, что это "один-лайнер" [1] было довольно прохладно:

HTML=$(wget -qO- http://tuxonice.net/downloads/all/ | grep tuxonice); TIMESTAMP=$(echo "$HTML" | sed 's/.*\([0-9]\{2\}-[A-Za-z]\{3\}-[0-9]\{4\} [0-9]\{2\}:[0-9]\{2\}\).*/\1/' | while read line; do echo $(date --date "$line" +%s) $line; done | sort | tail -n 1 | cut -d' ' -f2-3); LINK=$(echo "$HTML" | grep "$TIMESTAMP" | sed 's/.*href=\"\(.*\)\".*/\1/'); echo "http://tuxonice.net/downloads/all/${LINK}" 

распечаток:

http://tuxonice.net/downloads/all/tuxonice-for-linux-3.8.0-2013-02-24.patch.bz2 

Этот подход действительно просто шутка. Очевидно, что есть лучшие способы сделать это, возможно, используя язык сценариев, поддерживающий разбор XML.

По крайней мере, возможно, это даст вам некоторое представление о том, как вы можете использовать значения даты/времени для файлов, чтобы выбрать «новейший». Но я бы предупредил об этом (потому что даты загрузки могут не совпадать с номерами версий), и предположим, что идея с номером версии, вероятно, была лучшей идеей, если вы можете каким-то образом обрабатывать все различные схемы именования имен и версий, похоже, они мы использовали.

[1] Это не настоящий один лайнер