神さまに毒電波を送るブログ -2ページ目

神さまに毒電波を送るブログ

時に神さまは努力したしないにかかわらず、平等に試練をお与えになる。

perl で Config::Tiny の片手落ちな間違いを正す

 

use strict;
use warnings;
use Config::Tiny;
my $Config = Config::Tiny->new;

if( -f 'file.ini' ){  # <- 【ここ重要】
  $Config = Config::Tiny->read('file.ini'); # ファイルの読み込み
}

my $val = ( defined $Config->{section1}->{val} ) ? defined $Config->{section1}->{val} : ""; # 値の読み込み
delete $Config->{section1}->{"para$val"}; # プロパティの削除

$val++;
$Config->{section1}->{val}= $val; # プロパティがあれば、値の上書き
$Config->{section1}->{"para$val"} = $val; # プロパティがなければ、追加
$Config->write('file.ini');   # 最後に書き込む!

クソ食えないPELRシリーズ。フォルダ中の中にある、指定の拡張子のファイル1種類だけを、タイムスタンプをチェックしつつ、古いならZIPへ置き換える。サーバーログの古いのは無駄なので、圧縮して保存するために作った。ローカルなHDDもネットワークドライブもOK。 perl pzip.pl \\192.168.0.1\log txt 100 とすると、\\192.168.0.1\log内の*.txtで100日以上古いファイルを*.txt.zipとして圧縮する。*.txtは消す。

use Encode;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use File::Basename;
use Data::Dumper;

$date=0;
if( not $#ARGV >= 1 ){
  print "経過日数が過ぎた対象ファイル群をZIPファイルへ置換えます\n";
  print "perl pzip.pl フォルダ名 対象ファイルの拡張子 [経過日数]\n";
  exit -1;
}

$keika = $ARGV[2] * 60*60*24;
$limit = time - $keika; 
($sec, $min, $hour, $day, $mon, $year) = localtime( $limit );
$year = $year + 1900;
$mon = $mon + 1;
print "$year/$mon/$day より古いファイルを削除します(1日ずれます)\n";
print "ファイル収集中\n";
@dir = glob( $ARGV[0] . "/*" . (( $ARGV[1] )? ".$ARGV[1]" : ".log") );
print "****** ソート中! *****\n";
@dir = sort {$a <=> $b} @dir;
print "削除中\n";
for $fullname ( @dir ) {
  $s = (stat($fullname))[9];
  if( $s < $limit ) {
    $zip = Archive::Zip->new();
    $zip->addFile( $fullname , $basename);
    $basename = basename( $fullname );
    $filename = $fullname . ".zip";
    if ( $zip->writeToFileNamed($filename, 'zip') == AZ_OK ) {
      print "ZIP OK ", $filename , "\n";
      if( (unlink $fullname) == 1 ){
        print "...DELETED\n";
      } else {
        print "*** DELETE Failure ***\n"
      }
    } else {
      print "ZIP NG ", $filename , "\n";
    }
  } else {
    print "Not ZIP ", $filename , "\n";
    last;
  }
  undef $zip;
}