Сначала я хочу извиниться за такой глупый вопрос, но я довольно новичок в написании сценариев.
Что я пытаюсь сделать:
В моем офисе я пытаюсь автоматизировать возможность возврата к заводским настройкам. Свое испытательное оборудование для разработчиков, а не производственное оборудование FYI. Я пытаюсь вывести список файлов из командной строки telnet коммутатора в массив, а затем отфильтровать их, чтобы сохранить наши изображения и удалить остальные.
Константы и переменные коммутатора: приглашение коммутатора для этого раздела =>, файлы имеют и не имеют расширений, папки выводятся как foo \
Мой вопрос: Подпрограмма неправильно выполняет команду rm, она работает в тесте (вывод значения), но не в самом сценарии удаления.
Новое обновление:
Я знаю, похоже, что я отказался от этого вопроса, но я этого не сделал! Я мучился с этой проблемой в течение последнего месяца, и я добился большого успеха. Я был в состоянии получить свои данные в мой первоначальный массив (да, у меня есть 2, об этом чуть позже). Он обработает массив и удалит содержимое, кроме тех, которые я хочу сохранить.
#!/usr/bin/perl
$| = 1;
use Net::Telnet;
use strict;
use CGI;
use warnings;
my $junk;
my $telnet;
my @array;
#establish connection
$telnet = new Net::Telnet (Timeout=> 10,
Errmode=> 'return',
Port => '2037');
$telnet->open('trn-13-mrv-con-07');
$telnet->put(chr(13));
#clear out buffered output for array to grab
$junk = $telnet->cmd(string => 'ls', prompt => '/=>/');
#array grabbing
@array = $telnet->cmd(string => 'ls', prompt => '/=>/');
#determining what the values are of the array
foreach my $item (@array) {
#removing the carriage return
chomp ($item);
#if it's a folder, this will shunt the to the sub
if ($item=~ /\//) {
subfolders ($item);
$telnet -> print("rm $item");
}
#checks to see if the file is the firmware for the switch
elsif ($item =~ /btm.swi|secondary.swi/) {
}
#deletes the rest
else {
$telnet -> print ("rm $item");
$telnet->put(chr(13));
}
}
sub subfolders {
my @subfolder_contents;
my $subfolder = $_[0];
my ($file, $sub_junk);
#attempting to clear out the array
undef @subfolder_contents;
#again grabing any cached output so array can do it's work
$sub_junk = $telnet ->cmd(string => "ls $subfolder", prompt => '/=>/');
#grabbing files from the folder
@subfolder_contents = $telnet ->cmd(string => "ls $subfolder", prompt => '/=>/');
#deleting all files in the subfolder
foreach $file (@subfolder_contents){
chomp ($file);
$telnet-> print ("rm $subfolder$file");
$telnet->put(chr(13));
}
};
exit;
Это все прекрасно работает, И это будет работать и для папок, в основном ... Это работает с папками, если папка пуста или в ней есть только один элемент. Если в папке 2 или более элементов, он не выдает команду для правильного удаления файлов в этой папке.
Любые мысли приветствуются. Спасибо!
Спасибо!