Я решил эту ошибку путем переперетаскивания за столом от проводника сервера до разработчика и восстановления.
Далее будет напечатан путь для всех файлов в $ base
относительно $ base
(не текущего каталога):
#!/usr/bin/perl
use warnings;
use strict;
use File::Spec;
use File::Find;
# can be absolute or relative (to the current directory)
my $base = '/base/directory';
my @absolute;
find({
wanted => sub { push @absolute, $_ if -f and -r },
no_chdir => 1,
}, $base);
my @relative = map { File::Spec->abs2rel($_, $base) } @absolute;
print $_, "\n" for @relative;
Как насчет того, чтобы просто удалить его:
foreach my $file (@files) {
$file =~ s:^\Q$path/::;
print "$file\n";
}
Примечание: это фактически изменит содержимое @ files
.
Согласно комментариям, это не работает, поэтому давайте протестируем полную программу:
#!/usr/local/bin/perl
use warnings;
use strict;
use File::Find;
my $path = "/usr/share/skel";
chdir($path);
my @files;
find(\&d, "$path");
foreach my $file (@files) {
$file =~ s:^\Q$path/::;
print "$file\n";
}
sub d {
-f and -r and push @files, $File::Find::name;
}
Я получаю вывод
$ ./find.pl dot.cshrc dot.login dot.login_conf dot.mailrc dot.profile dot.shrc
Мне кажется, что это работает нормально. Я также тестировал его с каталогами с подкаталогами, и проблем нет.