#!/usr/bin/env perl use 5.024; use strict; use warnings; use Log::Any::Adapter; use Log::Any::Adapter::Util; use Log::Any '$log'; use Path::Tiny; use Getopt::Long::Descriptive; use AniDB::Manager; my ($opt, $usage) = describe_options( '%c %o ', [ 'database|d=s', 'the database to cache things into', { default => 'aindb-renamer.db' } ], [], [ 'verbose|v=+', 'print extra stuff' ], [ 'help', 'print usage message and exit', { shortcircuit => 1 } ], { getopt_conf => [qw( posix_default bundling no_ignore_case )], show_defaults => 1, }, ); print($usage->text), exit 0 if $opt->help; Log::Any::Adapter->set( 'Stdout', log_level => Log::Any::Adapter::Util::numeric_level('warning') + $opt->verbose, ); my $anidb = AniDB::Manager->new({database=>$opt->database}); my %new_name_for; for my $dir (@ARGV) { my $path_iter = path($dir)->iterator({recurse=>1,follow_symlinks=>0}); while (my $path = $path_iter->()) { next unless $path->is_file; $log->info("looking at $path") $anidb->update($path); if (my $new_name = $anidb->maybe_new_name_for($path)) { $new_name_for{$path->stringify} = $new_name; } } } for my $current_name (sort keys %new_name_for) { $log->infof('renaming %s to %s',$current_name,$new_name_for{$current_name}); $anidb->rename($current_name,$new_name_for{$current_name}); }