-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPerl.pl
More file actions
144 lines (127 loc) · 3.52 KB
/
Copy pathPerl.pl
File metadata and controls
144 lines (127 loc) · 3.52 KB
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
use strict;
use warnings;
use File::Find;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Digest::file qw(digest_file_hex);
my $DB_Name = 'save.ini';
my %map_digest;
my @fileList;
Menu();
sub Menu {
while (1){
print "Enter 1: Giam Sat File - Real Time. \n";
print "Enter 2: Kiem Tra Giam Sat Thu Muc. \n";
print "Enter 3: Luu Trang Thai Thu Muc. \n";
print "Enter 0: Thoat.\n";
my $menu = <STDIN>;
chomp $menu;
if ($menu == 1) {
monitorFile();
}elsif ($menu == 2){
my $foldername = InputFolder();
monitorFolder($foldername);
}if ($menu == 3) {
my $foldername = InputFolder();
saveFolderStatus($foldername);
}elsif ($menu == 0){
exit;
}
}
}
sub monitorFile {
print "Nhap File Theo Can Giam Sat: ";
my $fileinput = <STDIN>;
chomp $fileinput;
open DATA, "<$fileinput" or die "File Not Exit";
my $olddigest = md5_hex(<DATA>);
close(DATA);
writeDB("$fileinput:$olddigest");
while (1) {
open (DATAFILE, "<$fileinput") or die ("error initial File");
my $newdigest = md5_hex(<DATAFILE>);
close(DATAFILE);
if ($newdigest eq $olddigest){
sleep 1;
} else {
print "File changed \n";
exit;
}
}
}
sub ReadDB {
open(my $fh, '<', $DB_Name) or die "Could not open file '$DB_Name' $!";;
while(my $line = <$fh>){
chomp($line);
my ($key,$digest) = split(':', $line);
$map_digest{$key} = $digest;
}
close($fh);
}
sub InputFolder {
print "Nhap Thu Muc Can Giam Sat: ";
my $directory = <STDIN>;
chomp $directory;
opendir (DIR, $directory) or die $!;
return $directory
}
sub monitorFolder {
my $directory = shift(@_);
ReadDB();
opendir (DIR, $directory) or die $!;
find(\&getFile, $directory);
#print @fileList;
foreach my $filename (@fileList){
# if (exists $map_digest{$filename}) {
# if ($map_digest{$filename} ne digest_file_hex($filename, "MD5")){
# print "File $filename changed! \n";
# }
# else{
# print "File $filename not changed! \n";
# }
# }else{
# print "File $filename changed name! \n";
# if(-e $directory.'/'.$filename){
# print "File $filename changed name!!! \n";
# }else{
# print "File $filename is not exist!";
# }
# }
# New file
if (!scalar($map_digest{$filename})) { doPrint($filename, "Created."); }
# Change File
elsif ($map_digest{$filename} ne digest_file_hex($filename, "MD5")) {
my $text = "Changed ";
&doPrint($filename, $text);
}
}
closedir(DIR);
foreach my $filename (keys %map_digest) {
if (!-e $filename) {
&doPrint($filename, "Deleted.");
}
}
exit;
}
sub saveFolderStatus {
my $directory = shift(@_);
opendir (DIR, $directory) or die $!;
open(my $DBFILE, '>', $DB_Name);
find(\&getFile, $directory);
foreach my $filename (@fileList){
print $DBFILE "$filename:", digest_file_hex($filename, "MD5"),"\n" ;
}
close($DBFILE);
print "Luu Trang Thai Thanh Cong\n";
}
sub getFile {
if (-d){
}else{
push @fileList, $File::Find::name;
}
}
# Print out a file change in a consistent format
sub doPrint {
my $fn = shift(@_);
my $t = shift(@_);
print $fn."\t\t".$t."\n";
}