29 янв. 2011 г.

Inotify. Слежение за изменением файлов.

Выполнение какого-нибудь скрипта при изменении файлов *.txt в текущем каталоге:

while true ; do
    inotifywait ./*.txt && echo "SOME TEXT HAS BEEN CHANGED!!1";
done


Забавный пример из официальной документации:

#!/bin/sh
while inotifywait -e modify /var/log/messages; do
    if tail -n1 /var/log/messages | grep httpd; then
        kdialog --msgbox "Apache needs love!"
    fi
done

23 янв. 2011 г.

QR-код с помощью Google Charts API

Ссылка на это сообщение:
http://chart.apis.google.com/chart?cht=qr&chs=100x100&choe=UTF-8&chld=H|0&chl=http://sjff.blogspot.com/2011/01/qr-google-charts-api.html
Изображение (кликабельно):

Sed. Tip 1. Группы в регулярных выражениях на примере переименования файлов

Нужно переименовать много файлов с именем вида «gost_01.02.2010.txt» в «gost_2010.02.01.txt» для сортировке по дате без проблем.

Пример замены:
$ echo "gost_01.02.2010.txt" | sed -r 's/([[:alpha:]]+)_([0-9]{2})\.([0-9]{2})\.([0-9]{4})\.txt$/\1_\4\.\3\.\2\.txt/g'
gost_2010.02.01.txt

Тут используется команда sed'a s/regexp/replacement/flags.
С помощью регулярного выражения (regexp) ищутся и разбиваются по группам интересующие нас поля. Затем исходная строка заменяется на replacement, в данном случае просто переставляем найденные группы и получаем нужное имя файла. Флаг g можно тут и не использовать, он нужен для замены всех совпадений.

Переименование всех файлов, начинающихся с «gost» в данном каталоге:
for file in ./gost*
do
    mv ${file} `echo ${file} | sed -r 's/([[:alpha:]]+)_([0-9]{2})\.([0-9]{2})\.([0-9]{4})\.txt$/\1_\4\.\3\.\2\.txt/g'`
done

Ссылки по теме:
  1. Регулярные выражения UNIX
  2. Введение в sed
  3. Википедия. Регулярные выражения