#!/usr/bin/env perl
|
|
|
|
use warnings;
|
|
use strict;
|
|
use 5.10.0;
|
|
|
|
use App::MarkFiles qw(each_path remove check_collisions);
|
|
use File::Basename;
|
|
use File::Copy;
|
|
use File::Spec;
|
|
use Getopt::Long;
|
|
use Pod::Usage;
|
|
|
|
my $dry_run;
|
|
GetOptions(
|
|
'no-action|dry-run|n' => \$dry_run,
|
|
help => sub { pod2usage(0) },
|
|
) or pod2usage(2);
|
|
|
|
my (@collisions) = check_collisions();
|
|
if (scalar @collisions) {
|
|
# We got something. Alert the user and bail.
|
|
say "Multiple marked paths would move to the following filenames:";
|
|
say join "\n", @collisions;
|
|
say "";
|
|
say "No action taken, since this probably isn't what you want.";
|
|
exit(1);
|
|
}
|
|
|
|
my @unmark;
|
|
each_path(sub {
|
|
my ($path) = @_;
|
|
|
|
unless (-e $path) {
|
|
say "No such file: " . $path;
|
|
return;
|
|
}
|
|
|
|
my ($source_basename, $source_path) = fileparse($path);
|
|
my $target = File::Spec->catfile('.', $source_basename);
|
|
|
|
if (-e $target) {
|
|
say "Warning: $path will overwrite $target";
|
|
}
|
|
|
|
if ($dry_run) {
|
|
say "Would move: $path";
|
|
push @unmark, $path;
|
|
return;
|
|
}
|
|
|
|
if (move($path, $target)) {
|
|
say "Moved: $path";
|
|
push @unmark, $path;
|
|
} else {
|
|
say "Move failed: $!"
|
|
}
|
|
});
|
|
|
|
if ($dry_run) {
|
|
say "Would remove marks from: " . join ', ', @unmark;
|
|
} else {
|
|
remove(@unmark);
|
|
}
|