· 8 years ago · Jul 16, 2018, 06:34 PM
1#!/usr/bin/perl
2use strict;
3use warnings;
4use DBI;
5use Digest::MD5;
6use FindBin;
7use Data::Dump qw/dump/;
8
9
10my $dbh = DBI->connect('DBI:mysql:dbname=test;host=localhost;port=3306', 'root', '');
11
12$dbh->do("DROP TABLE IF EXISTS `temp_file`") if $ENV{DROP_TABLE};
13$dbh->do(<<EOC);
14CREATE TABLE IF NOT EXISTS `temp_file` (
15 `md5` varbinary(32) NOT NULL,
16 `temp_name` varbinary(255) NOT NULL,
17 `real_name` varbinary(255) NOT NULL,
18 `width` int(10) unsigned NOT NULL,
19 `height` int(10) unsigned NOT NULL,
20 `size` int(10) unsigned NOT NULL,
21 `ignore` tinyint(1) unsigned NOT NULL,
22 PRIMARY KEY (`md5`)
23) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24EOC
25
26my $base = $FindBin::Bin . '/img';
27my $prefix = '';
28
29{
30 my $seq;
31 my $prev = '';
32
33 my $select = $dbh->prepare("SELECT * FROM `temp_file` WHERE `md5` = ?");
34 my $update = $dbh->prepare("UPDATE `temp_file` SET `real_name` = ?, `ignore` = 1 WHERE `md5` = ?");
35
36 while (<$base/*$prefix/*>) {
37 if (-d $_) {
38 dump($_);
39 next;
40 } elsif ($prefix) {
41 my $dirname = $_;
42 $dirname =~ s{[^/]+$}{};
43
44 if ($dirname ne $prev) {
45 $prev = $dirname;
46 dump($dirname);
47 }
48 }
49
50 my $filename = $_;
51 $filename =~ s{$base/}{};
52
53 open my $file, '<', $_;
54 my $digest = Digest::MD5->new->addfile($file)->hexdigest;
55 #my $size = (stat $file)[7]; # size
56
57 $select->execute($digest);
58 if (my $row = $select->fetchrow_arrayref) {
59 dump(++$seq, [$digest, $filename]);
60 $update->execute($filename, $digest);
61 } else {
62 #print "not found¥n";
63 }
64 }
65}