#!/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;                                                                     
}



syntax highlighted by Code2HTML, v. 0.9.1