# sometimes you just get unnamed files # sometimes you don't, count yourself lucky # # but if you do not fear, libmagic is here. # # # # File recovery, snappy-fix, whatever # # perl ./magic-renamer.pl $input_dir $output_dir # # magic renamer will take files regardless of extension # and copy them into a dest folder with their respective # real extensions. # # ex: # # input/1a915afe2 <- this is a recovered file... it's really a jpg # input/42ae2bce4 <- this is a recovered file... it's really an svg # # result # # output/1a915afe2.png # output/42ae2bce4.svg use File::LibMagic; use File::Copy; opendir my $DIR, $ARGV[0] or die "Cannot open directory: $!"; my $magic = File::LibMagic->new; while( ($filename = readdir($DIR))) { my $source = $ARGV[0] . '/' . $filename; my $dest = $ARGV[1] . '/' . $filename; my $info = $magic->info_from_filename($source); if($info->{description} =~ /SVG/) { print "copy to $dest.svg\n"; copy($source, $dest . ".svg"); } elsif($info->{description} =~ /JPEG/) { print "copy to $dest.jpg\n"; copy($source, $dest . ".jpg"); } elsif($info->{description} =~ /GIF/) { print "copy to $dest.gif\n"; copy($source, $dest . ".gif"); } elsif($info->{description} =~ /PNG/) { print "copy to $dest.png\n"; copy($source, $dest . ".png"); } elsif($info->{description} =~ /RIFF/) { print "copy to $dest.webp\n"; copy($source, $dest . ".webp"); } elsif($info->{description} =~ /MP4/) { print "copy to $dest.mp4\n"; copy($source, $dest . ".mp4"); } else { print "ignoring $source\n"; } }