No Graff. I still not able to slove the problem but saying that I corrected container tags. Thank you very much
I don't know how to pass the correct subdirlevel1 and subdirlevel2 when the file found.
I have 3 files in each subdir levels and in all 1st container tag i get the values of subdirelevel1(MIUY) and in 2nd container tag i get the value as filename but not the folder name
Test file content which resides under A2/MIUY/CCT/CCT023.bat:
start putty -ssh -P 29921 1000.24008.50004.20CoioipreA -l root -pw olp.ikmj
Test file content which resides under A2/MIUY/SST/RETEEY.bat
start putty -ssh -P 278721A 10098.298748.509984.200901DukectreirecotA -l root -pw Tuytt.nA
Test file content which resides under A2/MIUY/WMW/WMWMTTY.bat
start putty -ssh -P 2210908A 1009.248090.50904.20001WyhgbvdserMipopA -l root -pw uyyn.npkju1A
Main script :
#!/usr/bin/perl
use warnings;
use strict;
use File::Find;
use File::Basename;
my $base_dir = 'C:\Testdata'; # put in your base directory
my ($dirname,$filename,$line,$resultfile,@fp,$file,$basedir1,$subdirle
+vel1,$subdirlevel2);
my (@linecolumns,@dir_names,@file,@filenames,@filecount);
open ($resultfile, '>>', 'C:\Results\resultfile.txt') or die "Can'
+t open file: $!";
print $resultfile '<?xml version="1.0" encoding="utf-8"?>';
print $resultfile "\n<!-- ********************-->\n";
print $resultfile "<!-- * *-->\n";
print $resultfile "<!-PuTTY Configuration Manager save file-All ri
+ght reserved->\n";
print $resultfile "<!-- * *-->\n";
print $resultfile "<!-- *******************-->\n";
print $resultfile "<!-The following lines can be modified at your
+own risks->\n";
opendir(IMD, $base_dir) || die("Cannot open directory");
my @thefiles= readdir(IMD);
next if @thefiles eq '.' or @thefiles eq '..';
push(@thefiles, basename($base_dir));
#print $thefiles[2];
closedir(IMD);
print $resultfile <<TTX
<configuration version="0.1.1.2" savepassword="True">
<root type="database" name="$thefiles[2]" expanded="True">
TTX
;
find( \&wanted, $base_dir );
print $resultfile "</root>\n";
print $resultfile "</configuration>\n";
sub wanted {
return if $_ eq '.' or $_ eq '..';
if (-d) {
print " >>> dive into: $_\n" if -d;
$dirname = $_;
push(@dir_names, basename($_));
}
else {
$basedir1 = $dir_names[0];
readout_file($_); ## call subroutine readout_file
&write_output($_);## call subroutine to print std template in
+output file
print "Output file has been generated successfully.. \n";
}
}
Sub functions
#sub function to write input file data into csv format
sub readout_file {
($filename) = @_;
open my $fh, '<', $filename or die "can't open file:$!";
while (<$fh>) {
chomp;
s/ /,/g; ## OR s/ /,/g; if you want
@linecolumns=split(',',$_);
$filename =~ s/.*\///;
$filename =~ s/\.[^.]+$//;
push(@filenames, $filename);
}
foreach(@dir_names){
(my $name,my $dir,my $ext) = fileparse($dir_names[1],'\..*');
$subdirlevel1 = $name;
$filename =~ s/.*\///;
$filename =~ s/\.[^.]+$//;
$subdirlevel2=(basename($filename));
print $dir_names[3], $/;
}
}
#sub function to write xml format in output file
sub write_output{
print $resultfile <<EOF
<container type="folder" name="$subdirlevel1" expanded="True">
<container type="folder" name="$subdirlevel2" expanded="T
+rue">
<connection type="PuTTY" name="$filename">
<connection_info>
<name>$filename</name>
<protocol>SSH</protocol>
<host>$linecolumns[5]</host>
<port>$linecolumns[4]</port>
<session>Default Settings</session>
<commandline>$linecolumns[10]</commandline>
<description />
</connection_info>
<login>
</login>
<password />
<prompt />
<login>
</login>
<timeout>
<connectiontimeout>1000</connectiontimeout>
<logintimeout>750</logintimeout>
<passwordtimeout>750</passwordtimeout>
<commandtimeout>750</commandtimeout>
</timeout>
<command>
<command1 />
<command2 />
<command3 />
<command4 />
<command5 />
</command>
<options>
<loginmacro>False</loginmacro>
<postcommands>False</postcommands>
<endlinechar>10</endlinechar>
</options>
</connection>
</container>
</container>
EOF
;
}
output :
<?xml version="1.0" encoding="utf-8"?>
<!-- ***********************************************-->
<!-- * *-->
<!-PuTTY Configuration Manager save file-All right reserved->
<!-- * *-->
<!-- ************************************************-->
<!-The following lines can be modified at your own risks->
<configuration version="0.1.1.2" savepassword="True">
<root type="database" name="A2" expanded="True">
<container type="folder" name="MIUY" expanded="True"> ### fir
+st time getting correct subdirlevel2 name
<container type="folder" name="CCT023" expanded="True">
+######## need to get foldername CCT not filename
<connection type="PuTTY" name="CCT023">
<connection_info>
<name>CCT023</name>
<protocol>SSH</protocol>
<host>1000.24008.50004.20CoioipreA</host>
<port>29921</port>
<session>Default Settings</session>
<commandline></commandline>
<description />
</connection_info>
<login>
</login>
<password />
<prompt />
<login>
</login>
<timeout>
<connectiontimeout>1000</connectiontimeout>
<logintimeout>750</logintimeout>
<passwordtimeout>750</passwordtimeout>
<commandtimeout>750</commandtimeout>
</timeout>
<command>
<command1 />
<command2 />
<command3 />
<command4 />
<command5 />
</command>
<options>
<loginmacro>False</loginmacro>
<postcommands>False</postcommands>
<endlinechar>10</endlinechar>
</options>
</connection>
</container>
</container>
<container type="folder" name="MIUY" expanded="True"> ###### N
+o need to print this line again
<container type="folder" name="RETEEYY" expanded="True">
+######### Need to get correct subdirlevel name which SST
<connection type="PuTTY" name="RETEEYY">
<connection_info>
<name>RETEEYY</name>
<protocol>SSH</protocol>
<host>10098.298748.509984.200901DukectreirecotA<
+/host>
<port>278721A</port>
<session>Default Settings</session>
<commandline></commandline>
<description />
</connection_info>
<login>
</login>
<password />
<prompt />
<login>
</login>
<timeout>
<connectiontimeout>1000</connectiontimeout>
<logintimeout>750</logintimeout>
<passwordtimeout>750</passwordtimeout>
<commandtimeout>750</commandtimeout>
</timeout>
<command>
<command1 />
<command2 />
<command3 />
<command4 />
<command5 />
</command>
<options>
<loginmacro>False</loginmacro>
<postcommands>False</postcommands>
<endlinechar>10</endlinechar>
</options>
</connection>
</container> ####################### not required
</container>
<container type="folder" name="MIUY" expanded="True"> ###### N
+o need to print this line again
<container type="folder" name="WMWMTTY" expanded="True">#
+######## Need to get correct subdirlevel name which WMW
<connection type="PuTTY" name="WMWMTTY">
<connection_info>
<name>WMWMTTY</name>
<protocol>SSH</protocol>
<host>1009.248090.50904.20001WyhgbvdserMipopA</h
+ost>
<port>2210908A</port>
<session>Default Settings</session>
<commandline></commandline>
<description />
</connection_info>
<login>
</login>
<password />
<prompt />
<login>
</login>
<timeout>
<connectiontimeout>1000</connectiontimeout>
<logintimeout>750</logintimeout>
<passwordtimeout>750</passwordtimeout>
<commandtimeout>750</commandtimeout>
</timeout>
<command>
<command1 />
<command2 />
<command3 />
<command4 />
<command5 />
</command>
<options>
<loginmacro>False</loginmacro>
<postcommands>False</postcommands>
<endlinechar>10</endlinechar>
</options>
</connection>
</container>########################## Not need
</container>
</root>
</configuration>
|