#!/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); }