summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--magic-renamer.pl64
1 files changed, 64 insertions, 0 deletions
diff --git a/magic-renamer.pl b/magic-renamer.pl
new file mode 100644
index 0000000..12a85aa
--- /dev/null
+++ b/magic-renamer.pl
@@ -0,0 +1,64 @@
+# 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";
+ }
+
+}
+