-
Notifications
You must be signed in to change notification settings - Fork 0
/
filefindWinfinal.pl
155 lines (140 loc) · 4.61 KB
/
filefindWinfinal.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/usr/bin/perl -w
#%%% made by j3nnn
#%%% license: GPLv3
use strict;
use File::stat;
use File::Find::Rule;
#use Mail::Sender; use Email::Stuff;
use Getopt::Std;
use POSIX;
require('../configs/configfilefindWinfinal.pl');
#== info about a file (mtime)
our $file_stat;
#== difference of seconds
our $diff_seconds;
#== array where is storage the rute to find file and delete
our @FilesDir;
#== indicates if the script delete a file for default if not otherwise specified
our $unlink;
#== indicates the time must have elapsed to delete a file if it is not specified to run
our $elapsetime;
#== array that contains the filename to delete
our @FilesNames;
#== to send email when finish
our $to;
#== object to send email
our $sender;
#== current time in seconds
my $time_current;
#== current time in seconds, but subtracting the hours that have passed that day. exactly this dd / mm / yy 00:00:00.
my $current_seconds;
#== has elapsed seconds in the day of modification of the file. exactly this 00 / 00 / 00 00:00:60.
my $time_valid_modify;
#== namefile to the log
my $name_file;
#== variable auxiliar text to log
my $cadena;
#== my %opts
my %argumento;
#== filename to process
my $filename;
getopts('t:e:', \%argumento);
if ($argumento{e}){ $unlink = $argumento{e};}
if ($argumento{t}){ $elapsetime = $argumento{t};}
unless ($unlink =~/(no|si)/i) {
print 'opcion invalida para parametro -e, usage [no, NO, si, SI]';
exit 1;
}
unless ($elapsetime =~ /^\d+$/) {
print 'mal formato - el tiempo debe estar en segundos y ser un numero entero\n';
exit 1;
}
# recorre todos los directorios del arreglo @FilesDir
$time_current= time;
foreach(@FilesDir){
@FilesNames = getFileName($_);
# recorre todos los archivos dados en el arreglo @FilesNames
foreach(@FilesNames){
$filename = $_;
$file_stat = stat($filename);
my($date_string) = $file_stat->mtime;
$current_seconds = PassTime(time);
#%% Obteniendo tiempo de modificacion.
$time_valid_modify = PassTime($date_string);
#%% Tiempo de antiguedad del archivo en segundos.
$diff_seconds = $current_seconds - $time_valid_modify;
#%% Llevando a días el tiempo de antiguedad del archivo en dias enteros.
$diff_seconds= $diff_seconds/86400;
if ($diff_seconds > $elapsetime){
if ($unlink =~/(no)/i){
my ($sec1, $min1, $hour1, $mday1, $mon1, $year1, $wday1, $yday1, $isdst1) = localtime($file_stat->mtime);
printf "$filename \t Modificado: ".'0'x(2-length($mday1)).$mday1."/".'0'x(2-length($mon1+1)).($mon1+1)."/".($year1+1900)."\n";
}
elsif($unlink =~/(si)/i){
unlink "$filename" or die "no se borro $filename : $@";
$name_file = 'log_delete_file'.Getcurrentdate().'.txt';
open (LOG, ">> $name_file") or die 'Imposible abrir archivo o usuario no posee privilegios';
$cadena = "$filename eliminado el: ".Getcurrentdate()."\n";
print LOG "$cadena";
close (LOG);
}
}
}
}
if ($name_file){
say('Se genero el log correspondiente...');
}
else {
if($unlink =~/si/i){
$name_file = 'log_delete_file'.Getcurrentdate().'.txt';
open (LOG, ">> $name_file") or die 'Imposible abrir archivo o usuario no posee privilegios';
print LOG 'el '.Getcurrentdate().' No se encontraron archivos con '.$elapsetime.' dias de antiguedad'.@FilesNames."\n";
close (LOG);
}
}
#===========
#funcion que transforma el tiempo a segun
#===========
sub PassTime{
my $timeCurrent;
my $hmodi_pass_sec;
my $mmodi_pass_sec;
my $current_sec;
my $diff;
$timeCurrent = shift;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($timeCurrent);
$hmodi_pass_sec = $hour*3600;
$mmodi_pass_sec = $min*60;
$current_sec = $hmodi_pass_sec + $mmodi_pass_sec + $sec; #segundos transcurridos en el dia.
$diff = $timeCurrent - $current_sec;
return $diff;
}
#===========
#Obtener fecha actual con formato para imprimir
#===========
sub Getcurrentdate{
my $currentdate;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time) or die 'Imposible obtener hora del sistema';
$mon = $mon + 1;
$year = $year + 1900;
$currentdate = $mday."-".$mon."-".$year;
return $currentdate;
}
#=====
# say
#=====
sub say {
my $texto =shift;
print $texto. "\n";
}
#===========
# obtener nombre de los archivos q se encuentren en el directorio de parametro de entrada.
#===========
sub getFileName {
my $sDirectory = shift;
# encuentra todos los archivos especificados en @subdirs
my @files = File::Find::Rule->file()
->name('*.txt', '*.log', '*')
->in( $sDirectory );
return @files
}