Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22701
  • 博文数量: 5
  • 博客积分: 1512
  • 博客等级: 上尉
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-23 23:18
文章分类

全部博文(5)

文章存档

2011年(4)

2008年(1)

我的朋友

分类: Python/Ruby

2011-04-13 08:45:40

因配置文件在移植到另一个系统后,里面配置的路径需要重新修改并创建,路径很多时一个个修改和创建非常麻烦,此脚本就是为解决此麻烦而生。
 
配置文件格式如下:
[SECTION]    #这个是配置段,整个文件有多个SECTION
ITEM=right_value   #这个是配置项名称(等号左边)和其值(等号右边),每个SECTION下有很多ITEM
目标:将上述格式配置文件中配置项(ITEM)的值(right_value)为路径的(right_value类似于这样的格式:"/home/larry/soft/cfg"),将这种路径统统转换为
"$OUTPUT_DIR/配置文件名称变体/SECTION/ITEM"。
 
脚本如下:
#script_name:set_cfg_path.pl
#!/usr/bin/perl
use strict ;
use File::Path ;
die qq/usage: perl $0 配置文件路径\n/ unless @ARGV==1 ;
my $cfg_file = shift ;
my $cfg_file_tmp = $cfg_file.".tmp" ;
if (!(-f "$cfg_file")) { die "Can't find the file: $cfg_file !" };
#用环境变量作为父路径
my $OUTPUT_DIR=$ENV{PROCESS_OUTPUT_DIR};
if(!(-d $OUTPUT_DIR)) { die "\$PROCESS_OUTPUT_DIR not export in your ENV" };
my $cfg_file_name=(split /\//,$cfg_file)[-1];
#配置文件名称以点号分隔,因其将要作为路径的一部分,故这里将点号替换成下划线以便美观易读。
$cfg_file_name=~s/\./\_/g;
my $conf_sect;
print "请检查下列配置项配置是否符合预期,本脚本采用(\/\\w+\/\\w+)的匹配方式,如果原来是文件被改成了目录的,请手工改正;\n如果个配置文件的输入目录是另一个配置文件的输出目录,需要手工将两者配成相同的.\n\n";
open(CFG, $cfg_file) or die $!;
open(CFG_TMP, ">>$cfg_file_tmp") or die $!;
while()
{
        chomp;
        #忽略注释
        if($_=~/^#/)
        {
                print CFG_TMP ($_,"\n");
                next;
        }
        #遇到配置段则抽取名称以作为新路径的一部分
        if($_=~/\[\w+\]/)
        {
                $conf_sect=(split /\]/,(split /\[/,$_)[1])[0];
        }
        if($_=~/\/\w+\/\w+/)
        {
                print "修改前:$_\n";
                my $cfg_item=(split /=/,$_)[0];
                my $cfg_value=(split /=/,$_)[1];
                my $path="$OUTPUT_DIR/$cfg_file_name/$conf_sect/$cfg_item";
                $path=~s/\s+//g;
                $_=~ s/$cfg_value/$path/g;     
                if(!-d $path){ mkpath($path,0,0755) or die $!;}
                print "修改后:$cfg_item\=$path\n\n";
        }
        print CFG_TMP ($_,"\n");
       
}
print "修改后的目录已创建完毕\n";
close CFG;
close CFG_TMP;
rename $cfg_file_tmp,$cfg_file;
阅读(1440) | 评论(1) | 转发(0) |
0

上一篇:暂存

下一篇:C++的沉迷与爱恋——侯捷

给主人留下些什么吧!~~

2gua2011-04-26 10:10:13

很基础很经典的Perl应用,没啥说的,但能够较好地帮助初学者。