У меня есть папка, которая содержит старые файлы, которые необходимо удалить без удаления запущенных файлов.
У меня есть команда в linux для вывода списка запущенных файлов, содержащих имена запущенных файлов.
{"xxxxxx","235235235.filename",{xxx},xxxx,xxxx,xxxx}
Мне просто нужны 235235235.filename
s и скрипт для сравнения с файлами в каталоге linux и удаления файлов, которые не совпадают, однако в каталоге также есть xxxxxxxxxxx_235235235.filename
s.
Здесьгде я сейчас нахожусь:
#!/usr/bin/perl -w
use strict;
use warnings;
my $dir = "****";
opendir(DIR, $dir) or die "Could not open $dir: $!\n";
my @allfiles = readdir DIR;
close DIR;
foreach my $oldfiles(@allfiles) {
$oldfiles =~ s/^(?>\N*?_)((?<field3>[^\n\r.]*?)\.str)$/$+{field3}/img;
#print "$oldfiles\n";
}
my $cmd ="****";
#my $cmd ="ls";
my @runEvents = `$cmd`;
chomp @runEvents;
print "done.";
foreach my $running(@runEvents) {
$running =~ s/(?<field2>[0-9a-z]{4}_8[0-9a-z]{2}_[0-9a-z]{2}[a-z][0-9a-z]0[0-9]\.str|PICO_8D[0-9]_2{2}6[0-9]-1{2}\.str)|\{"PID 8[0-9a-z]{2}","/$+{field2}/ig;
print "$running\n";
}
Когда запускается последнее регулярное выражение, я получаю
Использование неинициализированного значения $ + ("field2"} в итераторе подстановки в строке 24.
Кто-нибудь может указать мне правильное направление?