use strict;
use warnings;
use File::Spec;
use File::Copy qw(move);
use File::Glob qw(:glob);
my $folder_path = qw( c:\test\foo\ );
my @file_paths = bsd_glob( $folder_path . '*' );
foreach my $old_path (@file_paths) {
if ( -f $old_path ) {
my ( $volume, $directories, $file ) = File::Spec->splitpath($old_path);
my @dirs = File::Spec->splitdir($directories);
my $prepend;
while ( !( $prepend = pop @dirs ) ) { } # see notes below
my $new_fname = $prepend . '-' . $file;
my $new_path = File::Spec->catpath( $volume, $directories, $new_fname );
move( $old_path, $new_path );
}
}
Я использую while, чтобы вытолкнуть последнее имя каталога перед именем файла, потому что splitdir
содержит предупреждение в Windows.Похоже, вы имеете дело с файлом Windows.