base64 エンコード/デコード
base64エンコード
$str = "たちあがれ日本" # 文字列からバイト列 (utf-8) に変換する $byte = [System.Text.Encoding]::UTF8.GetBytes( $str ) # 文字列からバイト列 (iso-2022-jp) に変換する # $enc = [System.Text.Encoding]::GetEncoding("iso-2022-jp") # $byte = $enc.GetBytes( $str ) # バイト列から base64 に変換する $base64 = [System.Convert]::ToBase64String( $byte ) echo $base64
base64デコード
$base64 = "44Gf44Gh44GC44GM44KM5pel5pys" # base64 からバイト列に変換する $byte = [System.Convert]::FromBase64String( $base64 ) # バイト列から文字列 (utf8) に変換する $str = [System.Text.Encoding]::UTF8.GetString( $byte ) # or # $enc = [System.Text.Encoding]::GetEncoding("utf-8") # $str = $enc.GetString( $byte ) # iso-2022-jp # $enc = [System.Text.Encoding]::GetEncoding("iso-2022-jp") # $str = $enc.GetString( $byte ) echo $str
POP3でメールを落として、MboxParserでゴニョる
#!/usr/bin/perl use strict; use warnings; use Mail::POP3Client; use Mail::MboxParser::Mail; my $user = "username"; my $pass = "password"; my $host = "example.jp"; my $ssl = 1; my $pop = new Mail::POP3Client( USER => $user, PASSWORD => $pass, HOST => $host, USESSL => $ssl, DEBUG => 0, AUTH_MODE => 'PASS' ); for (my $i = 1; $i <= $pop->Count; $i++) { my $msg = Mail::MboxParser::Mail->new( [ $pop->Head($i) ], [ $pop->Body($i) ] ); print $msg->header->{subject}, "\n"; # $pop->Delete($i); } $pop->Close();
パスワードがブレーンのときは AUTH_MODE を PASS にする。あとは、http://d.hatena.ne.jp/chabom/20100617/1279259115 のようにメッセージをほげる。
printf で揃える
#!/usr/bin/perl use strict; use warnings; my @host = ( { 'hostname' => "host1", 'size' => 613475, 'used' => 16551 }, { 'hostname' => "host2", 'size' => 613501, 'used' => 15214 }, ); printf "%-5s %8s %8s %8s %4s\n", "Host", "Size", "Used", "Avail", "Use%"; foreach (@host) { printf "%-5s %7dM %7dM %7dM %3d%%\n", $_->{hostname}, $_->{size}, $_->{used}, $_->{size} - $_->{used}, $_->{used} / $_->{size} * 100; }
$ ./printf.pl Host Size Used Avail Use% host1 613475M 16551M 596924M 2% host2 613501M 15214M 598287M 2%
mbox形式からメール本文と添付ファイルを抜く
#!/usr/bin/perl use strict; use warnings; use Mail::MboxParser; use DateTime::Format::Mail; my $mbox = $ARGV[0]; die unless ($mbox); my $mb = Mail::MboxParser->new($mbox, decode => 'ALL', parseropts => { enable_cache => 1, cache_file_name => 'cache-file', }); my $i = 1; for my $msg ($mb->get_messages) { my ($subject, $date, $dt, $prefix); $subject = $msg->header->{subject}; $date = $msg->header->{date}; $dt = DateTime::Format::Mail->parse_datetime($date); $date = $dt->ymd(""); # 日付のディレクトリ作成 mkdir "./$date" unless (-d "./$date"); $prefix = sprintf("%02d", $i); # body を保存する open my $fh, '>', "./$date/${prefix}.txt" or die $!; $msg->store_entity_body(0, handle => \*$fh); close $fh; # 添付ファイルを保存する if ($msg->get_attachments) { $msg->store_all_attachments(path => "./$date", prefix => "${prefix}_"); } $i++; }
$ ./parse-mbox.pl mbox $ ls -F 20100615/ 20100616/ 20100617/
日付文字列の変換
DateTime::Format::Mail
#!/usr/bin/perl use strict; use warnings; use DateTime::Format::Mail; my $date = "Thu, 17 Jun 2010 00:00:35 +0900"; my $dt = DateTime::Format::Mail->parse_datetime($date); print $dt->ymd(""), "\n";
$ ./rfc2822date.pl
20100617
DateTime::Format::Strptime
#!/usr/bin/perl use strict; use warnings; use DateTime::Format::Strptime; my $date = "Jun 17, 2010"; my $strp = DateTime::Format::Strptime->new(pattern => "%b %d, %Y"); my $dt = $strp->parse_datetime($date); print $dt->ymd(""), "\n";
$ ./strptime.pl
20100617
バッチでコミットする
#!/bin/sh # 毎日の統計をsubversionリポジトリにコミットする date=`date '+%Y%m%d'` cd /home/turbo/log /home/turbo/stat.pl > stat.txt svn ci -m "update $date" svn up
で、cronに仕込むと。
$ crontab -e 0 2 * * * /home/turbo/stat.sh