diff -u --recursive --new-file fsbackup-1.1pl2/CHANGES fsbackup-1.2/CHANGES
--- fsbackup-1.1pl2/CHANGES	Sat Dec 29 14:41:49 2001
+++ fsbackup-1.2/CHANGES	Thu May 16 19:33:39 2002
@@ -1,10 +1,35 @@
-Major changes between version 1.1pl1 and 1.1p2.
+Major changes between version 1.1pl2 and 1.2
+--------------------------------------------
+* Исправлена недоработка при бэкапе символических ссылок, если используются 
+  MD5 контрольные суммы содержимого файла.
+
+* В mysql_backup.sh и pgsql_backup.sh добавлена поддержка бэкапа не только 
+  всей базы целиком, но и выбранных таблиц из баз. Например, таблица для
+  включения или исключения из архива указывается в виде (traffic - имя БД,
+  users, passwords - таблицы): backup_db_list="traffic:users traffic:passwords"
+
+* Дополнительные скрипты для fsbackup от Alex Sokoloff <sokoloff@mail.ru>:
+    contrib/fsbackup.cron - альтернатива для запуска бэкапа из cron.
+    contrib/fsfind.pl     - поиска файла в архивах.
+    contrib/ib_backup.pl  бэкапа Interbase баз.
+
+* При бэкапе sql таблиц (mysql_backup.sh и pgsql_backup.sh) структура всех
+  таблиц копируется в *-struct-* файл, в начало файлов *-mysql или -pgsql 
+  копируется только структура заданных баз.
+
+* Директива исключения из бэкапа '!' теперь действует не только для директорий,
+  но и для файлов.
+
+* Исправлены ошибки в скрипте fsrestore.sh
+
+
+Major changes between version 1.1pl1 and 1.1pl2.
 --------------------------------------------
 * Введена директива $cfg_stopdir_prune, для отключения рекурсивного просмотра 
   директорий, запрещаемых для помещения в бэкап (увеличивается скорость бэкапа, 
   уменьшает гибкость настройки).
 
-Major changes between version 1.1 and 1.1p1.
+Major changes between version 1.1 and 1.1pl1.
 --------------------------------------------
 * Добавлены лидирующие нули в новом формате наименования файлов в бэкапе.
 
@@ -15,7 +40,7 @@
 * Исправлена интерпретация оператора исключения пути, теперь путь исключается
   не по маске, а по директории. т.е. !/u  не будет исключать директорию /usr;
 
-* Испрвлена ошибка при вычислении уровня инкрементальности при локальном типе
+* Исправлена ошибка при вычислении уровня инкрементальности при локальном типе
   бэкапа;
 
 * Добавлен ключ --all-databases в mysql_backup.sh, для варианта полного архива;
@@ -39,7 +64,7 @@
   на имя_бэкапа-YYYY.MM.DD.HH.MM.SS-номер_тома.tar.gz;
 
 * Добавлено разбиение бэкапа на блоки в зависимости от суммарного размера 
-  резервируемых данных. Полезно при создании гиганских архивов не влезающих 
+  резервируемых данных. Полезно при создании гигантских архивов не влезающих 
   в ограничение файловой системы или при последующей записи архивов на CD-ROM 
   или другие накопители небольшого размера. ($cfg_maximum_archive_size в конф. 
   файле);
diff -u --recursive --new-file fsbackup-1.1pl2/FAQ fsbackup-1.2/FAQ
--- fsbackup-1.1pl2/FAQ	Mon Dec 10 00:38:53 2001
+++ fsbackup-1.2/FAQ	Thu May 16 17:35:11 2002
@@ -1,4 +1,4 @@
-		FAQ - ОТВЕТЫ НА ЧАСТОЗАДАВАЕМЫЕ ВОПРОСЫ
+		FAQ - ОТВЕТЫ НА ЧАСТО-ЗАДАВАЕМЫЕ ВОПРОСЫ
 	    
 -------------------------------------------------------------------------------
 Как увеличить быстродействие и снизить нагрузку на процессор при шифровании
@@ -12,7 +12,7 @@
 -------------------------------------------------------------------------------
 Возникло опасение, что при большом количестве файлов fsbackup съест все ОЗУ.
 
-    Ничего подобного, одним из достоинств fsbackup явлется очень экономные 
+    Ничего подобного, одним из достоинств fsbackup является очень экономные 
     требования к памяти, за счет использования для хранения хэшей библиотеки 
     DBM. По умолчанию, используется не более 4 Мб ОЗУ.
 
@@ -22,17 +22,17 @@
 
     По умолчанию в памяти находится только 4 Мб индексов, остальное сбрасывается
     на диск. Быстродействие создания бэкапа можно _на_порядок_ увеличить, за 
-    счет увеличения размер кэша для размежения хэш таблицы в памяти.
+    счет увеличения размер кэша для размещения хэш таблицы в памяти.
     Для этого в fsbackup.pl нужно изменить значения константы:
 	use constant DB_DEF_CACHE_SIZE => размер_кэша_в_байтах; 
     Чем больше DB_DEF_CACHE_SIZE - тем лучше.
 
 -------------------------------------------------------------------------------
-Собрался сменить fsbackup 1.0 на 1.1. Не будет ли проблем с существующей 
+Собрался сменить fsbackup 1.0 на 1.1 (1.2). Не будет ли проблем с существующей 
 конфигурацией, при переходе на новую версию ?
 
     Можно смело оставить старые файлы конфигурации, заменив только скрипты.
-    При желании активировать новинки, появившиеся в 1.1, загляните в CHANGES
+    При желании активировать новинки, появившиеся в 1.1 (1.2), загляните в CHANGES
     и добавте новые переменные в старые конфиги.
     
 -------------------------------------------------------------------------------
@@ -43,7 +43,9 @@
     Например, бэкап всех баз на MySQL сервере, кроме ненужной гигобайтовой базы 
     словоформ для поисковика. fsbackup же опирается на три кита: полный бэкап 
     всех баз, бэкап только указанных в backup_db_list баз данных и бэкап всех 
-    баз, кроме указанных в backup_db_list.
+    баз, кроме указанных в backup_db_list. Начиная с версии 1.2 fsbackup умеет
+    производить бэкап (или исключать из бэкапа) не только отдельные базы, но
+    и таблицы.
 
 -------------------------------------------------------------------------------
 Как наиболее грамотно организовать бэкап сервера и большим объемом данных ?
@@ -58,6 +60,11 @@
 	server_home.conf - бэкап директорий пользователей (/home или /usr/home)
 	server_soft.conf - бэкап архива программ (без сжатия)
 
+    Внимание, директории для сохранения бэкапа в каждом конфигурационном файле
+    должны отличаться ($cfg_remote_path, $cfg_local_path), сохранение в одной и
+    той же директории нескольких, описанных разными .conf файлами, бэкапов не 
+    допустимо.
+
 -------------------------------------------------------------------------------
 Почему при указании переменной $cfg_maximum_archive_size=100, несжатые
 тома архива оказываются размером немного больше или меньше 100 Кб ?
@@ -76,3 +83,52 @@
     используемый для резервирования, можно определив максимально возможный
     размер файла для помещения в архив ($cfg_size_limit).
     
+-------------------------------------------------------------------------------
+Как мне не архивировать файлы из таких - то каталогов, причем сами каталоги 
+должны быть. Например, почтовые каталоги qmail, задаю маску: =!Maildir/cur/*
+в результате не создает в архиве каталогов cur в профилях пользователя.
+
+    Достаточно указать:    
+	f!.*/Maildir/new/.*
+    тогда все файлы внутри /Maildir/new/ не будут помещены в архив, а директория
+    будет добавлена в .dir файл и при восстановлении будет воссоздана. В tar архив
+    пустые директории не помещаются, только в .dir список.
+
+-------------------------------------------------------------------------------
+Почему fsbackup не делает backup каталогов, если в них нет файлов ?
+    
+    Пустые каталоги просто не отражены в tar архиве (ровно как и права доступа 
+    на все каталоги). Для хранения полного списка каталогов и прав доступа к ним,
+    используется .dir файл, выполненный в виде обычного shell сценария. При 
+    восстановлении данных из backup, необходимо не только раскрыть .tar архив, но
+    и выполнить .dir сценарий.
+
+-------------------------------------------------------------------------------
+Что можите порекомендовать для бэкапа нескольких серверов ?    
+
+    - Выделить старую машину с большим диском под backup-сервер.
+    - Вынести backup-сервер с тех. площадки, рекомендуется в другое здание 
+      (например в удаленный офис), на случай пожара, грабежа и других 
+      форс-мажорных обстоятельств. Или периодически скидывать бэкапы с 
+      backup-сервера на переносной носитель (лента, CDROM и т.д.) и уносить 
+      домой.
+    - Рекомендую производить бэкап по FTP, при грамотной организации, не менее 
+      безопасно, чем по SSH (при использовании PGP шифрования бэкапа и 
+      предотвращении возможности сниффинга), а главное более быстрый и 
+      менее ресурсоемкий способ. 
+    - На каждом из серверов, с которых будет производится бэкап, разграничить
+      области файловой системы в зависимости от важности и объема данных.
+      Каждую область описать в отдельном файле конфигурации (см. вопросы выше).
+      Для самых важных данных (например, файлы паролей, секретная информация
+      представляющая коммерческую тайну и т.д.), используйте PGP шифрование.
+      Для текстовых данных большого объема и не требующих частого поднятия из
+      бэкапа - используйте gzip сжатие. Если потребность в доступе к данным
+      в бэкапе велика, можно ограничиться обычным tar архивом без сжатия.
+    - Настроить ftp-сервер с доступом только c хостов с которых производится 
+      бэкап (например, через /etc/hosts.allow) и закрытым для внешнего мира.
+      В конфигурации ftp сервера запретите выход за пределы домашней 
+      директории (/etc/ftpchroot). Дополнительно, через crontab, пропишите 
+      еженедельное дублирование резервной копии на бэкап-сервере на 
+      соседний диск (резервирование бэкапа).
+    
+    
\ No newline at end of file
diff -u --recursive --new-file fsbackup-1.1pl2/README fsbackup-1.2/README
--- fsbackup-1.1pl2/README	Sat Dec 29 14:41:49 2001
+++ fsbackup-1.2/README	Thu May 16 17:35:11 2002
@@ -104,9 +104,9 @@
 	    хранимой в PostgreSQL или MySQL. 
 	    Поддерживаются режимы работы:
 	    1. полный бэкап всех баз и структур;
-	    2. полный бэкап структур всех баз + бэкап данных в избранных базах;
+	    2. полный бэкап структур всех баз + бэкап данных в избранных базах/таблицах;
 	    3. полный бэкап структур всех баз + бэкап данных во всех базах, 
-	       кроме избранных баз;
+	       кроме избранных баз/таблиц;
 
 	scripts/sysbackup.sh
 	    Скрипт для сохранения списка всех установленных в системе пакетов 
@@ -222,6 +222,11 @@
 		      бэкап БД.
     server_home.conf - бэкап директорий пользователей (/home или /usr/home)
 
+Внимание, директории для сохранения бэкапа в каждом конфигурационном файле
+должны отличаться ($cfg_remote_path, $cfg_local_path), сохранение в одной и
+той же директории нескольких, описанных разными .conf файлами, бэкапов не 
+допустимо.
+
 ---------------------------------------------------------------------------
 Восстановление данных:
 
@@ -422,7 +427,15 @@
 
 ---------------------------------------------------------------------------
 Благодарности:
-
+Alex Sokoloff. <sokoloff@mail.ru>
+	- Предложение о введении уровней говорливости (verbose mode).
+	- Изменить запуск программы (ввести проверку на длину
+          письма), вынести ее в файл fsbackup.cron.
+	- Написал небольшой скрипт fsfind.pl для поиска файла в архивах он 
+	  просматривает файлы list в директории с архивами. Может кому-то 
+	  будет полезен. Работает с локальными архивами.
+	- скрипт для бэкапа Interbase баз.
+	
 Oleg S. Gints <oleg@cec.amur.elektra.ru>:
 	- Предложение по введению дополнительного резервирования при 
 	  использовании инкрементального бэкапа.
@@ -449,11 +462,9 @@
 	- Замечание по неправильной работе правила для исключения 
 	  директории из бэкапа.
 
-sokoloff <sokoloff@mail.ru>
-	- Предложение о введении уровней говорливости (verbose mode).
-
 Zherdev Anatoly <tolyar@mx.ru>
 	- Патч и идея введения директивы $cfg_stopdir_prune, для отключения
 	  рекурсивного просмотра директорий, запрещаемых для помещения в бэкап.
 	  
-	
\ No newline at end of file
+Priamikov Alexei <apriam@info.novsu.ac.ru>
+	- Обнаружение ошибки в fsrestore.sh
diff -u --recursive --new-file fsbackup-1.1pl2/VERSION fsbackup-1.2/VERSION
--- fsbackup-1.1pl2/VERSION	Sat Dec 29 14:41:49 2001
+++ fsbackup-1.2/VERSION	Thu May 16 17:35:11 2002
@@ -1 +1 @@
-1.1pl2
\ No newline at end of file
+1.2
\ No newline at end of file
diff -u --recursive --new-file fsbackup-1.1pl2/contrib/CONTRIB.txt fsbackup-1.2/contrib/CONTRIB.txt
--- fsbackup-1.1pl2/contrib/CONTRIB.txt	Thu Jan  1 05:00:00 1970
+++ fsbackup-1.2/contrib/CONTRIB.txt	Thu May 16 17:34:40 2002
@@ -0,0 +1,24 @@
+fsbackup.cron  by Alex Sokoloff. <sokoloff@mail.ru>
+
+Если поставить параметр $cfg_verbose = 0, и использовать приведенную
+в файле строку для crontab:
+18 4 * * * /opt/fsbackup/create_backup.sh| mail -s"`name -n` backup report" root
+получаем 2 письма, одно пустое от root, второе от Cron Daemon с
+сообщением "Null message body; hope that's ok"
+
+Предлагаю немного изменить запуск программы (ввести проверку на длину
+письма), вынести ее в файл fsbackup.cron (вариант файла в атаче).
+
+=====================================
+fsfind.pl  by Alex Sokoloff. <sokoloff@mail.ru>
+
+Я написал небольшой скрипт fsfind.pl для поиска файла в архивах он просматривает
+файлы list в директории с архивами. Может кому-то будет полезен. Работает с
+локальными архивами, с ftp и ssh не делал т.к. нет необходимости, но
+можно подумать.
+
+=====================================
+ib_backup.pl by Alex Sokoloff. <sokoloff@mail.ru>
+
+Написал маленький скриптец для бэкапа Interbase баз.
+
diff -u --recursive --new-file fsbackup-1.1pl2/contrib/fsbackup.cron fsbackup-1.2/contrib/fsbackup.cron
--- fsbackup-1.1pl2/contrib/fsbackup.cron	Thu Jan  1 05:00:00 1970
+++ fsbackup-1.2/contrib/fsbackup.cron	Thu May 16 17:34:41 2002
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Backup planner running from crontab.
+# Скрипт для запуска backup подсистемы из crontab.
+#
+#
+# Пример строки для crontab: 18 4 * * * /opt/fsbackup/fs_backup.cron
+#
+
+letter="`/opt/fsbackup/create_backup.sh` "
+
+if [ "$letter" ]; then 
+    echo  "$letter " | mail -s"`uname -n` backup report" root
+fi
diff -u --recursive --new-file fsbackup-1.1pl2/contrib/fsfind.pl fsbackup-1.2/contrib/fsfind.pl
--- fsbackup-1.1pl2/contrib/fsfind.pl	Thu Jan  1 05:00:00 1970
+++ fsbackup-1.2/contrib/fsfind.pl	Thu May 16 17:34:41 2002
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+
+# Скрипт для поиска файлов в архивах созданных программой fsbackup             
+# Copyright (c) 2001 by Alex Sokoloff. <sokoloff@mail.ru>   
+#                                                           
+# Написан для fsbackup                                      
+# http://www.opennet.ru/dev/fsbackup/                       
+# Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>       
+
+#############################################
+
+my $type="list";
+my $extract=0;
+$cfg_cache_dir = "./";
+my $findfile;
+
+# Обработка параметров командной строки
+while (@ARGV){
+    $arg= shift (@ARGV);
+    if 	  ($arg eq "-h" or $arg eq "--help") {&help}		
+    elsif ($arg eq "-d" or $arg eq "--del")  { $type="del"}	
+    elsif ($arg eq "-c" or $arg eq "--cfgfile")  {
+	    $config = shift (@ARGV);
+	    require "$config" if ( -f $config );
+    	}
+    elsif ($arg eq "-p" or $arg eq "--path")  {
+	$cfg_cache_dir=shift (@ARGV);
+	}
+    elsif ($arg eq "-m" or $arg eq "--mask")  {	
+	$cfg_backup_name = shift (@ARGV);
+	}
+    else {$findfile="$arg"}
+}
+
+if ($findfile eq '') {
+    print "Не указан искомый файл\n";
+    &help;
+}
+
+if ( ! -d $cfg_cache_dir ) {print "Дирректория: $cfg_cache_dir не найдена\n"; &help}
+
+@files=sort {$b cmp $a} glob("$cfg_cache_dir/$cfg_backup_name*.$type" );
+if ($#files <0) {
+    print "В дирректории $cfg_cache_dir не найден ни один файл $cfg_backup_name.$type\n";
+    exit;    
+}
+
+# Переводим регулярные выражения 
+$findfile=~ s/\./\\\./g;
+$findfile=~ s/\*/\.\+/g;    
+$findfile=~ s/\_/\./g;        
+
+# Собственно поиск и печать результатов    
+foreach $f (@files){
+    open (FILE, "$f");
+    $tmp ="$f\n";
+
+    while (<FILE>){
+	chomp;
+	if (/$findfile/i){ $tmp.="\t$_\n";}
+    }
+    
+    if ($tmp ne "$f\n" ){ 
+	$tmp=~ s/^$cfg_cache_dir\///;
+    	print "$tmp\n"; 
+    }		
+}
+
+exit;
+
+sub help{
+print qq|Usage: fsfind  [OPTION]...  FILE
+Ищет FILE в архивах созданных в fsbackup, В имени файла допускается
+использование регулярных выражений:
+  *   любое количество любых символов
+  _   любой одиночный символ
+
+Опции:
+  -d, --del	      	искать удаленные файлы
+  -p, --path ПУТЬ	путь к дирректории с архивами, если не указано,
+                         то поиск ведется в текущей дирректории
+  -m, --mask            Маска для имен файлов архивов в которых производится 
+                         поиск
+  -c, --cfgfile ФАЙЛ    файл конфигурации fsbackup в котором прописана 
+			 дирректория с архивами и имя файла архива
+  -h, --help	    	вывести эту подсказку и выйти
+
+|;
+    exit;                                                                     
+}
+
diff -u --recursive --new-file fsbackup-1.1pl2/contrib/ib_backup.pl fsbackup-1.2/contrib/ib_backup.pl
--- fsbackup-1.1pl2/contrib/ib_backup.pl	Thu Jan  1 05:00:00 1970
+++ fsbackup-1.2/contrib/ib_backup.pl	Thu May 16 17:34:41 2002
@@ -0,0 +1,106 @@
+#!/usr/bin/perl
+# Script for backup SQL tables from InterBase
+# Скрипт для бэкапа данных хранимых в InterBase
+# Copyright (c) 2001 by Alex Sokoloff. <sokoloff@mail.ru>
+#
+# Написан для fsbackup
+# http://www.opennet.ru/dev/fsbackup/
+# Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>
+#
+#
+
+#-------------------
+# Directory to store SQL backup. You must have enought free disk space to store 
+# all data from you SQL server.
+# Директория куда будет помещен бэкап данных с SQL сервера. 
+# Внимание !!! Дожно быть достаточно свободного места для бэкапа всех 
+# выбранных БД.
+#-------------------
+
+$backup_path="/opt/fsbackup";
+
+#-------------------
+# List of databases and it's
+# names of backup, single word.
+# Список включаемых в бэкап баз, и имена бэкапов.
+#-------------------
+
+%db_list=(
+
+"/interbase/base1.gdb",	 "base1.gbk",
+"/interbase/base2.gdb",  "base2.gbk"
+
+);
+
+
+#-------------------
+# Auth information for MySQL.
+# Имя пользователя и пароль для содинения с Mysql, для InterBase скрипт 
+# должен запускаться из-под пользователя с правами полного боступа к базам InterBase.
+#-------------------
+
+#backup_ibuser=""
+#backup_ibpassword=""
+
+
+#-------------------
+# Full path of InterBase backup program (gbak).
+# Путь к программе InterBase backup (gbak).
+#-------------------
+
+$backup_progdump="/opt/interbase/bin/gbak";
+
+#-------------------                                                          
+# Verbose level.                                                              
+#       0       - Silent mode, suspend all output, except fatal configuration 
+#                 errors.                                                     
+#       1       - Output errors and warnings.                                 
+#       2       - Output all the  available  data.                            
+#                                                                             
+# Уровень "говорливости", регулирует объем выводимых программой сообщений.    
+#       0       - Подавить вывод любых сообщений.                             
+#       1       - Выводить сообщения об ошибках и предупреждения              
+#       2       - Выводить все сообщения                                      
+#-------------------                                                          
+                                                                              
+$cfg_verbose = 2;                                                           
+  
+#-------------------                                                        
+# Full path of some external program running from C<fsbackup.pl>.           
+# $prog_gzip = "" - not use compression.                                    
+# Пути к запускаемым в процессе выполнения бэкапа программам. Рекомендуется 
+# не полениться и прописать полный путь к каждой программе.                 
+#-------------------       
+                                                 
+$prog_gzip="/bin/gzip"; # Если равно "", или программа не найдена,          
+                         # то не использовать сжатие.                        
+                                                                            
+############################################################################
+if ($cfg_verbose > 1) {$gbak_verbose="-v";};
+# Определяем есть ли файл соответствующий $prog_gzip
+
+if ( -f $prog_gzip ) { 
+    $add_ext=".gz"; 
+    $prog_gzip="stdout | $prog_gzip >";
+}
+else {
+    print "WARRNING: Programm $prog_gzip not found!\n" if ($prog_gzip and $cfg_verbose > 0 );
+    $prog_gzip="";
+}
+
+#---------------------------------------------------------------------------
+# Бэкап указанных баз для InterBase
+    foreach (keys %db_list){
+        if ( not -f $_){ 
+	    print "ERROR: Source file $_ not found!\n" if ($cfg_verbose >0);    
+	    next;
+        }; 
+    print "Dumping $_  in $backup_path/$db_list{$_}...\n" if ($cfg_verbose > 1);
+
+    `$backup_progdump -B $gbak_verbose  $_ $prog_gzip $backup_path/$db_list{$_}$add_ext\n`;
+    }
+
+
+
+
+
diff -u --recursive --new-file fsbackup-1.1pl2/create_backup.sh fsbackup-1.2/create_backup.sh
--- fsbackup-1.1pl2/create_backup.sh	Sun Dec  9 22:59:10 2001
+++ fsbackup-1.2/create_backup.sh	Tue Jan  8 11:26:02 2002
@@ -19,7 +19,15 @@
 
 #--------------------------------------
 # List of fsbackup configuration files, delimited by spaces.
+# Directories for saving backup in each configuration file should differ 
+# ($cfg_remote_path, $cfg_local_path).
+#
 # Список файлов конфигурации, разделенных пробелом.
+# Директории для сохранения бэкапа в каждом конфигурационном файле
+# должны отличаться ($cfg_remote_path, $cfg_local_path), сохранение в одной и
+# тойже директории нескольких, описанных разными .conf файлами, бэкапов не 
+# допустимо.
+
 #--------------------------------------
 
 config_files="cfg_example"
diff -u --recursive --new-file fsbackup-1.1pl2/fsbackup.pl fsbackup-1.2/fsbackup.pl
--- fsbackup-1.1pl2/fsbackup.pl	Sat Dec 29 14:41:49 2001
+++ fsbackup-1.2/fsbackup.pl	Thu May 16 17:35:11 2002
@@ -2,7 +2,7 @@
 # fsbackup - file system backup and synchronization utility. 
 #
 # http://www.opennet.ru/dev/fsbackup/
-# Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>
+# Copyright (c) 2001-2002 by Maxim Chirkov. <mc@tyumen.ru>
 #
 # Ключи:
 # -n - создаем новый архив независимо от состояния хэша.
@@ -544,7 +544,7 @@
 	      next;
 	  }
 
-	  if ($cfg_checksum eq "md5"){
+	  if (($cfg_checksum eq "md5") && (! -l $file_fullpath)){
 	      ($md5_checksum_stat, $tmp) = split(/\s+/, `$prog_md5sum '$file_fullpath_esc'`);
 	      $active_hash_new{$file_fullpath_md5} = "$checksum_stat/$md5_checksum_stat";
 	      check_update($file_fullpath, "$checksum_stat/$md5_checksum_stat", $file_fullpath_md5, $stat_size);
@@ -640,7 +640,7 @@
 
 
     foreach $item (@fs_notpath){
-	if ($dir_name eq $item || $dir_name =~ /^$item\//){
+	if (($dir_name eq $item) || ($path eq $item) || ($dir_name =~ /^$item\//)){
 	    return 0;
 	}
     }
diff -u --recursive --new-file fsbackup-1.1pl2/scripts/fsrestore.sh fsbackup-1.2/scripts/fsrestore.sh
--- fsbackup-1.1pl2/scripts/fsrestore.sh	Sun Dec  9 01:18:48 2001
+++ fsbackup-1.2/scripts/fsrestore.sh	Sat Jan 26 18:19:45 2002
@@ -40,11 +40,11 @@
 	if [ -e "$del_file" ]; then
     	    echo "Removing deleted files for $cur_arc..."
 	    cd $restore_path
-	    sh $del_file
+	    sh $backup_path/$del_file
 	    cd $backup_path
 	fi
         echo "Restoring $cur_arc..."
-	gzip_type=`echo $restore_path|grep '.gz'`
+	gzip_type=`ls $cur_arc|grep '.gz'`
 	if [ -n "$gzip_type" ]; then
 	    tar -xzf $cur_arc -C $restore_path
 	else
@@ -53,7 +53,7 @@
 	if [ -e "$dir_file" ]; then
 	    echo "Fixing directory permissions for $cur_arc..."
 	    cd $restore_path
-	    sh $dir_file
+	    sh $backup_path/$dir_file
 	    cd $backup_path
 	fi
 done
diff -u --recursive --new-file fsbackup-1.1pl2/scripts/mysql_backup.sh fsbackup-1.2/scripts/mysql_backup.sh
--- fsbackup-1.1pl2/scripts/mysql_backup.sh	Sun Oct 14 15:32:48 2001
+++ fsbackup-1.2/scripts/mysql_backup.sh	Thu May 16 19:33:40 2002
@@ -6,7 +6,7 @@
 # Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>
 #
 # For restore data type:
-# Восстановление произваодится с помощью команды: mysql < backupfile
+# Восстановление производится с помощью команды: mysql < backupfile
 #
 
 #-------------------
@@ -32,6 +32,11 @@
 #	  реконструкции баз и таблиц записываются для всех баз на SQL сервере.
 # notdb  - бэкап всех баз, кроме указанных в backup_db_list, записи по 
 #	   реконструкции баз и таблиц записываются для всех баз на SQL сервере.
+#          Возможно исключение из бэкапа  выборочных таблиц, тогда формат 
+#	   списка исключаемых таблиц задается в виде: 
+#	   "trash_db1 trash_db2:table1 trash_db2:table2"
+#          - производим бэкап всех баз, коме базы trash_db1 и таблиц table1 и 
+#	   table2 базы trash_db2.
 #
 #-------------------
 
@@ -41,15 +46,16 @@
 #-------------------
 # List of databases (delimited by spaces)
 # Список включаемых или исключаемых из бэкапа баз, через пробел.
+# Таблицы указываются в виде: имя_базы:имя_таблицы
 #-------------------
 
-backup_db_list="aspseek trash mnogosearch"
+backup_db_list="aspseek trash:cache_table1 trash:cache_table2 mnogosearch"
 
 
 #-------------------
 # Auth information for MySQL.
-# Имя пользователя и пароль для содинения с Mysql, для PostgreSQL скрипт 
-# должен запускаться из-под пользователя с правами полного боступа к базам PostgreSQL.
+# Имя пользователя и пароль для соединения с Mysql, для PostgreSQL скрипт 
+# должен запускаться из-под пользователя с правами полного доступа к базам PostgreSQL.
 #-------------------
 
 backup_mysqluser=""
@@ -60,7 +66,7 @@
 # Directory to store SQL backup. You must have enought free disk space to store 
 # all data from you SQL server.
 # Директория куда будет помещен бэкап данных с SQL сервера. 
-# Внимание !!! Дожно быть достаточно свободного места для бэкапа всех 
+# Внимание !!! Должно быть достаточно свободного места для бэкапа всех 
 # выбранных БД.
 #-------------------
 
@@ -74,6 +80,17 @@
 
 backup_progdump_path="/usr/local/mysql/bin"
 
+#-------------------
+# Extra flags for mysqldump program. 
+# -c (--complete-insert) - Use complete insert statements.
+# Дополнительные параметры для pg_dump
+# -c - формировать бэкап данных в виде INSERT комманд, с указанием названий
+#      столбцов. Если скорость восстановления из бэкапа и размер бэкапа
+#      более важны, и совместимостью с другими СУБД можно пренебречь, 
+#      используйте: extra_mysqldump_flag=""
+#-------------------
+
+extra_mysqldump_flag="--complete-insert"
 
 ############################################################################
 
@@ -85,7 +102,8 @@
 # Полный бэкап для Mysql
 if [ "_$backup_method" = "_full" ]; then
     echo "Creating full backup of all MySQL databases."
-    ${backup_progdump_path}mysqldump --all-databases --all --add-drop-table --force --password=$backup_mysqlpassword --user=$backup_mysqluser |gzip > $backup_path/$backup_name-mysql.gz
+    ${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
+    ${backup_progdump_path}mysqldump --all-databases --all --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser |gzip > $backup_path/$backup_name-mysql.gz
     exit
 fi
 
@@ -93,8 +111,14 @@
 # Бэкап указанных баз для Mysql
 if [ "_$backup_method" = "_db" ]; then
     echo "Creating full backup of $backup_db_list MySQL databases."
-    ${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-mysql
-    ${backup_progdump_path}mysqldump --all --force --databases $backup_db_list --no-create-info --no-create-db --password=$backup_mysqlpassword --user=$backup_mysqluser >> $backup_path/$backup_name-mysql
+    ${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
+    cat /dev/null > $backup_path/$backup_name-mysql
+
+    for cur_db in $backup_db_list; do
+	echo "Dumping $cur_db..."
+	cur_db=`echo "$cur_db" | awk -F':' '{if (\$2 != ""){print \$1, \$2}else{print \$1}}'`
+	${backup_progdump_path}mysqldump --all --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser $cur_db	>> $backup_path/$backup_name-mysql
+    done
     gzip -f $backup_path/$backup_name-mysql
     exit
 fi
@@ -103,21 +127,46 @@
 # Бэкап всех баз кроме указанных для Mysql
 if [ "_$backup_method" = "_notdb" ]; then
     echo "Creating full backup of all MySQL databases except databases $backup_db_list."
-    ${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-mysql
+    ${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
+    cat /dev/null > $backup_path/$backup_name-mysql
     
     for cur_db in `${backup_progdump_path}mysqlshow --password=$backup_mysqlpassword --user=$backup_mysqluser| tr -d ' |'|grep -v -E '^Databases$|^\+\-\-\-'`; do
-	flag=1
-	for cur_ignore in $backup_db_list; do
-	    if [ "_$cur_ignore" = "_$cur_db" ]; then
-		flag=0
-	    fi
-	done
 
-	if [ $flag -gt 0 ]; then
-	    echo "Dumping $cur_db..."
-	    ${backup_progdump_path}mysqldump --all --force --databases $cur_db --no-create-info --no-create-db --password=$backup_mysqlpassword --user=$backup_mysqluser >> $backup_path/$backup_name-mysql
+	grep_flag=`echo " $backup_db_list"| grep " $cur_db:"`
+	if [ -n "$grep_flag" ]; then
+# Исключение таблиц для данной базы
+	    for cur_db_table in `${backup_progdump_path}mysqlshow --password=$backup_mysqlpassword --user=$backup_mysqluser $cur_db| tr -d ' |'|grep -v -E '^Tables$|^Database\:|^\+\-\-\-'`; do
+
+		flag=1
+		for cur_ignore in $backup_db_list; do
+		    if [ "_$cur_ignore" = "_$cur_db:$cur_db_table" ]; then
+			flag=0
+		    fi
+    		done
+
+		if [ $flag -gt 0 ]; then
+		    echo "Dumping $cur_db:$cur_db_table..."
+		    ${backup_progdump_path}mysqldump --all --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser $cur_db $cur_db_table >> $backup_path/$backup_name-mysql
+
+		else
+		    echo "Skiping $cur_db:$cur_db_table..."
+		fi
+	    done
 	else
-	    echo "Skiping $cur_db..."
+# Исключение базы
+	    flag=1
+	    for cur_ignore in $backup_db_list; do
+		if [ "_$cur_ignore" = "_$cur_db" ]; then
+		    flag=0
+		fi
+	    done
+
+	    if [ $flag -gt 0 ]; then
+		echo "Dumping $cur_db..."
+		${backup_progdump_path}mysqldump --all --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser $cur_db >> $backup_path/$backup_name-mysql
+	    else
+		echo "Skiping $cur_db..."
+	    fi
 	fi
     done
     gzip -f $backup_path/$backup_name-mysql
diff -u --recursive --new-file fsbackup-1.1pl2/scripts/pgsql_backup.sh fsbackup-1.2/scripts/pgsql_backup.sh
--- fsbackup-1.1pl2/scripts/pgsql_backup.sh	Fri Jul 27 02:43:54 2001
+++ fsbackup-1.2/scripts/pgsql_backup.sh	Thu May 16 19:33:40 2002
@@ -6,7 +6,7 @@
 # Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>
 #
 # For restore data type:
-# Восстановление произваодится с помощью команды: psql -d template1 -f backupfile
+# Восстановление производится с помощью команды: psql -d template1 -f backupfile
 #
 
 #-------------------
@@ -31,24 +31,30 @@
 #	  реконструкции баз и таблиц записываются для всех баз на SQL сервере.
 # notdb  - бэкап всех баз, кроме указанных в backup_db_list, записи по 
 #	   реконструкции баз и таблиц записываются для всех баз на SQL сервере.
+#          Возможно исключение из бэкапа  выборочных таблиц, тогда формат 
+#	   списка исключаемых таблиц задается в виде: 
+#	   "trash_db1 trash_db2:table1 trash_db2:table2"
+#          - производим бэкап всех баз, коме базы trash_db1 и таблиц table1 и 
+#	   table2 базы trash_db2.
+#          
 #
 #-------------------
 
 backup_method="notdb"
 
-
 #-------------------
 # List of databases (delimited by spaces)
 # Список включаемых или исключаемых из бэкапа баз, через пробел.
+# Таблицы указываются в виде: имя_базы:имя_таблицы
 #-------------------
 
-backup_db_list="aspseek trash mnogosearch"
+backup_db_list="aspseek trash:cache_table1 trash:cache_table2 mnogosearch"
 
 
 #-------------------
 # Auth information for MySQL.
-# Имя пользователя и пароль для содинения с Mysql, для PostgreSQL скрипт 
-# должен запускаться из-под пользователя с правами полного боступа к базам PostgreSQL.
+# Имя пользователя и пароль для соединения с Mysql, для PostgreSQL скрипт 
+# должен запускаться из-под пользователя с правами полного доступа к базам PostgreSQL.
 #-------------------
 
 backup_mysqluser=""
@@ -59,7 +65,7 @@
 # Directory to store SQL backup. You must have enought free disk space to store 
 # all data from you SQL server.
 # Директория куда будет помещен бэкап данных с SQL сервера. 
-# Внимание !!! Дожно быть достаточно свободного места для бэкапа всех 
+# Внимание !!! Должно быть достаточно свободного места для бэкапа всех 
 # выбранных БД.
 #-------------------
 
@@ -73,6 +79,17 @@
 
 backup_progdump_path="/usr/local/pgsql/bin"
 
+#-------------------
+# Extra flags for pg_dump program. 
+# -D - Dump data as INSERT commands with  explicit  column names
+# Дополнительные параметры для pg_dump
+# -D - формировать бэкап данных в виде INSERT комманд, с указанием названий
+#      столбцов. Если скорость восстановления из бэкапа и размер бэкапа
+#      более важны, и совместимостью с другими СУБД можно пренебречь, 
+#      используйте: extra_pg_dump_flag=""
+#-------------------
+
+extra_pg_dump_flag="-D"
 
 ############################################################################
 
@@ -84,7 +101,8 @@
 # Полный бэкап для Postgresql
 if [ "_$backup_method" = "_full" ]; then
     echo "Creating full backup of all PostgreSQL databases."
-    ${backup_progdump_path}pg_dumpall|gzip > $backup_path/$backup_name-pgsql.gz
+    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-struct-pgsql
+    ${backup_progdump_path}pg_dumpall $extra_pg_dump_flag|gzip > $backup_path/$backup_name-pgsql.gz
     exit
 
 fi
@@ -93,10 +111,13 @@
 # Бэкап указанных баз для Postgresql
 if [ "_$backup_method" = "_db" ]; then
     echo "Creating full backup of $backup_db_list PostgreSQL databases."
-    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-pgsql
+    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-struct-pgsql
+    cat /dev/null > $backup_path/$backup_name-pgsql
+
     for cur_db in $backup_db_list; do
 	echo "Dumping $cur_db..."
-	${backup_progdump_path}pg_dump -a $cur_db >> $backup_path/$backup_name-pgsql
+	cur_db=`echo "$cur_db" | awk -F':' '{if (\$2 != ""){print "-t", \$2, \$1}else{print \$1}}'`
+	${backup_progdump_path}pg_dump $extra_pg_dump_flag $cur_db >> $backup_path/$backup_name-pgsql
     done
     gzip -f $backup_path/$backup_name-pgsql
 
@@ -108,21 +129,45 @@
 # Бэкап всех баз кроме указанных для Postgresql
 if [ "_$backup_method" = "_notdb" ]; then
     echo "Creating full backup of all PostgreSQL databases except databases $backup_db_list."
-    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-pgsql
+    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-struct-pgsql
+    cat /dev/null > $backup_path/$backup_name-pgsql
 
     for cur_db in `${backup_progdump_path}psql -A -q -t -c "select datname from pg_database" template1 | grep -v '^template1$' `; do
-	flag=1
-	for cur_ignore in $backup_db_list; do
-	    if [ "_$cur_ignore" = "_$cur_db" ]; then
-		flag=0
-	    fi
-	done
 
-	if [ $flag -gt 0 ]; then
-	    echo "Dumping $cur_db..."
-	    ${backup_progdump_path}pg_dump -a $cur_db >> $backup_path/$backup_name-pgsql
+	grep_flag=`echo " $backup_db_list"| grep " $cur_db:"`
+	if [ -n "$grep_flag" ]; then
+# Исключение таблиц для данной базы
+	    for cur_db_table in `echo '\d'| ${backup_progdump_path}psql -A -q -t $cur_db |cut -d'|' -f1`; do
+
+		flag=1
+		for cur_ignore in $backup_db_list; do
+		    if [ "_$cur_ignore" = "_$cur_db:$cur_db_table" ]; then
+			flag=0
+		    fi
+    		done
+
+		if [ $flag -gt 0 ]; then
+		    echo "Dumping $cur_db:$cur_db_table..."
+		    ${backup_progdump_path}pg_dump $extra_pg_dump_flag -t $cur_db_table $cur_db >> $backup_path/$backup_name-pgsql
+		else
+		    echo "Skiping $cur_db:$cur_db_table..."
+		fi
+	    done
 	else
-	    echo "Skiping $cur_db..."
+# Исключение базы
+	    flag=1
+	    for cur_ignore in $backup_db_list; do
+		if [ "_$cur_ignore" = "_$cur_db" ]; then
+		    flag=0
+		fi
+    	    done
+
+	    if [ $flag -gt 0 ]; then
+		echo "Dumping $cur_db..."
+		${backup_progdump_path}pg_dump $extra_pg_dump_flag $cur_db >> $backup_path/$backup_name-pgsql
+	    else
+		echo "Skiping $cur_db..."
+	    fi
 	fi
     done
     gzip -f $backup_path/$backup_name-pgsql
