Демон перекидывания файлов

Программа tosser предназначена для атомарного перекладывания файлов из любой вложенности любого количества рабочих каталогов в выходной каталог с сохранением пути вложенности или с изменением пути, перекодировкой имен файлов, архивации и проверкой на дубликаты. Имеется встроенный монитор, отслеживающий работоспособность программы для предотвращения зависания работы при проблемах с сетевыми файловыми системами и вызывающий необходимые указанные скрипты для устранения проблем. Широкий набор опций позволяет произвести выборку файлов с учетом вложенности, маски (образца) файла, производить перекладывание с учетом приоритетов и сортировки; выбирать поведение при наличии файла-дубликата в архиве; проверять на печатные символы; проверять на занятость дескриптора файла любым процессом в системе путем сканирования псевдофайловой системы /proc; выбирать владельца файла для создания выходного, архивного файла и для успешного удаления из входных каталогов; игнорировать или нет пустые файлы и прочее.

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

Опции использования программы tosser:

tosser -s sendto_dir [-t sendto_temp_dir] [-0(no binary)] [-1 [-I]] [-T] [-f(oreground and debug)] [-p pidfile] [-P(/proc scan)] [-u uid_for_create] [-U uid_for_delete] [-e(mpty is ok too)] [-l logfile] [-h file_with_convert_paths] [-n ticks] [-D(skip_delete)] [-R(do_not_create_subdirs)] [-H hidename] [-2 rescan_time] [-E encode_str] [-S skip_first_dirs] [-N daemon_name] [-x|X(sort_modify_time|reverse)] [-y priority_for_sort_mask] [-O overwrite_mask] [-C wait_restart_if_need_remote[:script]] [-i restart_if_exit_code_is_0[:is_not_0[:heart_beat]] [-k script]] [-a archive [-M archive_mask] [-A archive_mode [-c] ] ] [-m mask] work_dir1 ...

Маски ksh-glob составляются по принципам:

Пример: *.@([dD][oO][cC]|[xX][lL][sS]) файлы any.doc либо any.xls без учета регистра расширения, то есть имя ANY.DoC соотвествует указанной маске.