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

NWZIP и регулярные выражения

СообщениеДобавлено: 31 авг 2009, 13:09
bgInner
Здравствуйте.
В документации к NWZIP сказано, что в параметре FILE_OR_DIR можно указывать регулярные выражения. Но если задаю что-то в роде LOG:\LOGS\^\.[0-9]{,3}$ (на ходу могу ошибиться, но требуется просто упаковать файлы с расширением, состоящим из цифр), то создается пустой архив, т.е. получается, что архиватор не находит нужных файлов.
Интерересует следующее: насколько полно NWZIP поддерживает регулярные выражения? Возможно автор реализовал только частичную поддержку (некоторых параметров). Может быть кто-то сталкивался с этим?

Одни выражения

СообщениеДобавлено: 31 авг 2009, 19:57
Павел Гарбар
Вот мне, например, сходу не нравится часть выражения: ^\.
Это ж не линух и обратный косая имеет другое значение.

Re: Одни выражения

СообщениеДобавлено: 01 сен 2009, 00:09
bgInner
Павел Гарбар писал(а):Вот мне, например, сходу не нравится часть выражения: ^\.
Это ж не линух и обратный косая имеет другое значение.

Павел, Линукс здесь не при чем.
В регулярных выражениях метасимвол '.' в обычном режиме означает "любой единичный символ", а '\.' означает просто точку. Для того, чтобы искать символ, совпадающий с метасимволом, его следует предварить обратной косой чертой.

А регулярные выражения - они везде регулярные: и под виндой, и под Линуксом
Кстати, сразу поправляю свой пример
FS1\LOG:\LOGS\^.+\.[0-9]{,3}$

Re: Одни выражения

СообщениеДобавлено: 01 сен 2009, 14:05
Константин Ошмян
bgInner писал(а):
Павел Гарбар писал(а):Вот мне, например, сходу не нравится часть выражения: ^\.
Это ж не линух и обратный косая имеет другое значение.

Павел, Линукс здесь не при чем.
В регулярных выражениях метасимвол '.' в обычном режиме означает "любой единичный символ", а '\.' означает просто точку. Для того, чтобы искать символ, совпадающий с метасимволом, его следует предварить обратной косой чертой.

А регулярные выражения - они везде регулярные: и под виндой, и под Линуксом
Кстати, сразу поправляю свой пример
FS1\LOG:\LOGS\^.+\.[0-9]{,3}$
В свете вышесказанного - не означает ли запись LOGS\^ просьбу искать файлы, начинающиеся с символов LOGS, после которых пятым символом идёт "шапочка" ^ (циркумфлекс)?

Ну-ну

СообщениеДобавлено: 01 сен 2009, 14:12
Павел Гарбар
Ты файл ищешь или регулярно выражаешься?
Это ж уйдет в командную строку, а не по текстовому файлу поиск.
Ну и можешь просто спросить у автора программы.

Re: Одни выражения

СообщениеДобавлено: 02 сен 2009, 00:51
bgInner
Константин Ошмян писал(а):
bgInner писал(а):
Павел Гарбар писал(а):Вот мне, например, сходу не нравится часть выражения: ^\.
Это ж не линух и обратный косая имеет другое значение.

Павел, Линукс здесь не при чем.
В регулярных выражениях метасимвол '.' в обычном режиме означает "любой единичный символ", а '\.' означает просто точку. Для того, чтобы искать символ, совпадающий с метасимволом, его следует предварить обратной косой чертой.

А регулярные выражения - они везде регулярные: и под виндой, и под Линуксом
Кстати, сразу поправляю свой пример
FS1\LOG:\LOGS\^.+\.[0-9]{,3}$

В свете вышесказанного - не означает ли запись LOGS\^ просьбу искать файлы, начинающиеся с символов LOGS, после которых пятым символом идёт "шапочка" ^ (циркумфлекс)?

Согласен. Надо в фигурные скобки взять. Но по порядку.
Вроде разобрался. Итак:
Всё сие было задумано для автоматической архивации логов Novell Audit 2.0.2. Данное ПО в конкретной папке создает логи вида LYYMMDD.NNN
где
L - просто латинская буква L
YY, MM, DD - соответственно две цифры года, месяца и дня
NNN - порядковый номер файла лога после ротации логов, задается ф HEX-формате, т.е. 000,... 0A0, FFE.

для поиска всех файлов с расширениями типа NNN прописываем:
Код: Выделить всё
FILE_OR_DIR = FS1\LOG:\test\{.[0-9a-fA-F]+$}


Однако, Novell audit создает в том же каталоге также и файл текущего лога, имя которого задается в настройках Novell audit и не совпадает с выше указанным форматом. У меня оно задано одним словом, без расширения, т.е. что-то типа MAINLOG
для поиска такого файла можно прописать следующее:

Код: Выделить всё
FILE_OR_DIR = FS1\LOG:\test\{^[0-9a-zA-Z_]+.$}


а теперь объединяем эти два фильтра:

Код: Выделить всё
FILE_OR_DIR = FS1\LOG:\test\{(^[0-9a-zA-Z_]+.$)|(.[0-9a-fA-F]+$)}


и не забываем указать на всякий случай:
Код: Выделить всё
EXCLUDEFILEMASK = (*.ZIP$)


Сегодня также набросал небольшенький bash-скрипт для переименования текущего файла лога (типа MAINLOG) в файл вида LYYMMDD.NNN, т.е. сделал принудительную ротацию логов.
Обращаю внимание, что перед такой ротацией я останавливаю аудит (т.к. текущий файл лога блокируется им) и после нее опять запускаю.
После чего спокойно запускаю NWZIP.

Теперь добавлю по поводу синтаксиса. Скачал искодники NWZIP, просомтрел вскользь. Понял, почему выражения тима моего изначального не работают: у регулярных выражений есть несколько вариантов синтаксиса. Что-то типа EMACS, POSIX, UNIX и т.д. Так вот, насколько я понял, NWZIP скомпилирован с поддержкой EMACS - там урезанный синтаксис.

Re: Ну-ну

СообщениеДобавлено: 02 сен 2009, 01:01
bgInner
Павел Гарбар писал(а):Ты файл ищешь или регулярно выражаешься?
Это ж уйдет в командную строку, а не по текстовому файлу поиск.

Нет, Павел. В командную строку именно это
Код: Выделить всё
FS1\LOG:\test\{(^[0-9a-zA-Z_]+.$)|(.[0-9a-fA-F]+$)}


не уйдет. Фильтр обработывается NWZIP-овским парсером регулярных выражений, и на основании оного и делается затем поиск файлов.

Ну и можешь просто спросить у автора программы.

А где можно спросить?

Автор - Андрей Подойников

СообщениеДобавлено: 02 сен 2009, 10:04
Павел Гарбар