0
A
答えて
0
#!/usr/bin/perl
use warnings;
use strict;
use File::Find;
use File::Copy;
use Getopt::Long;
my $inDir = undef;
my $outDir = undef ;
my $adiumUser = undef;
my $force = 0;
my $foundLogs = 0;
my $help = 0;
my %Protocols = ( #Map gaim protocol IDs to Adium ones
"aim" => "AIM",
"yahoo" => "Yahoo!",
"msn" => "MSN"
#Add the rest here, or tell me what they are, someone who uses other protocols
);
sub usage
{
my $msg = shift;
print "Error: $msg\n" if $msg;
print "Usage: gaim2adium.pl [--adiumUser <user> | --outDir <output dir>] [--inDir <input dir>] [--yes]\n";
print "Options: (defaults)\n\n";
print "\tinDir:\t\t\tDirectory to import logs from (~/.gaim/logs)\n";
print "\toutDir:\t\t\tDirectory to import logs to (./Logs)\n";
print "\tadiumUser:\t\tAttempt to automatically import logs to the specified Adium user\n";
print "\tyes:\t\t\tDon't prompt before overwriting existing logs\n";
print "\thelp:\t\t\tDisplay this help.\n";
print "\nOnce the logs have been imported, the contents of outDir can be dragged to your Adium log folder\n\n";
exit(1);
}
sub process_log
{
-f or return;
#gaim logs are LOG_BASE/Protocol/Account/Contact/YYYY-MM-DD-TIME.(html|txt)
if($File::Find::name =~ m!^$inDir(?:/)?(.*?)/(.*?)/(.*?)/(\d{4})-(\d{2})-(\d{2})\.(\d{4})(\d{2}).(html|txt)!)
{
my ($proto,$acct,$contact,$year,$month,$day,$hour,$seconds,$ext) = ($1,$2,$3,$4,$5,$6,$7,$8,$9);
return unless defined ($proto = $Protocols{lc $proto});
$foundLogs = 1; #Set the logs found flag
my $outFN = "$contact ($year|$month|$day).";
$outFN .= ((lc $ext) eq "html") ? "html" : "adiumLog";
mkdir("$outDir/$proto.$acct");
mkdir("$outDir/$proto.$acct/$contact");
my $file = "$outDir/$proto.$acct/$contact/$outFN";
if(-e $file && !$force)
{
# print(($adiumUser?"$adiumUser already has":"There already exists"),
# " a log from $proto.$acct to $contact on $day/$month/$year.\n");
`cat '$File::Find::name' >> '$file'`;
} else {
copy($File::Find::name,$file);
}
`touch -t $year$month$day$hour.$seconds '$file'`;
}
}
#Sort a list of log files by time
sub sort_logs
{
my @files = @_;
return sort logcmp @files;
}
sub logcmp
{
my ($t1,$t2);
$t1 = $& if $a =~ /\d{6}/;
$t2 = $& if $b =~ /\d{6}/;
return 0 unless defined($t1) && defined($t2);
return $t1 <=> $t2;
}
GetOptions( "adiumUser=s" => \$adiumUser,
"inDir=s" => \$inDir,
"outDir=s" => \$outDir,
"yes" => \$force,
"help" => \$help)
or usage();
usage() if $help;
usage("You must supply at most one of adiumUser and outDir") if defined($outDir) && defined($adiumUser);
$outDir ||= "$ENV{HOME}/Library/Application Support/Adium 2.0/Users/$adiumUser/Logs" if defined $adiumUser;
$outDir ||= "$ENV{PWD}/Logs";
$inDir ||= shift;
$inDir ||= "$ENV{HOME}/.gaim/logs";
print "NOTE: Output directory exists, existing logs will be appended to.\n" if(-d $outDir);
mkdir($outDir) unless -e $outDir;
usage("Output dir must be a directory") unless -d $outDir;
usage("Output dir must be writeable") unless -w $outDir;
usage("Input directory '$inDir' does not exist") unless -d $inDir;
usage("Input directory '$inDir' is not readable") unless -r $inDir;
#Spider the logs dir
find({wanted => \&process_log,
preprocess => \&sort_logs}, $inDir);
#Warn if we didn't find any logs
unless($foundLogs)
{
print "Warning: No recognized logs found.\n";
print "Note:\tThis script only supports logs generated by gaim 0.73 and above.\n";
print "\tYou may be able to update older gaim logs to the new format using the script from\n";
print "\thttp://sourceforge.net/forum/message.php?msg_id=2392758\n";
exit(1);
}
exit(0);
+0
この回答の書式のみを修正したことにご注意ください。私はコードがどこから来るのか分からないが、それはかなり馬鹿だ。 –
関連する問題
- 1. ログ変換のループ
- 2. evtxログをcsvエラーに変換する
- 3. キューブルートとログ変換をR
- 4. Javaのログ式を変換する
- 5. Yahoo Messenger API for PHP
- 6. Yahoo Messenger API for Flex
- 7. yahoo messenger lib for python?
- 8. R:ログ軸スケールと手動ログ変換の違い?
- 9. ログを分割ログに追加する
- 10. hazelcastログをlog4j2ログにリダイレクト
- 11. グレー画像ログ変換in java
- 12. Python - リストをログ(リスト)に変換する方法
- 13. PL/SQLでログ行を複数の列に変換する
- 14. ログをCでリニアに変換して平均をとる
- 15. Apacheログからエポック時間に変換する時間
- 16. SVN変更ログを変更する
- 17. Yahoo Financeをデータフレームに変換する
- 18. Lambda(Node.js)からCloudwatchログのログ形式を変更します
- 19. Laravel変更ログ・パス
- 20. Perlコード変更ログ
- 21. Redmineの変更ログ
- 22. サービスのログにelmahのログを統合するには
- 23. Laravel5のログ解析のログ
- 24. はPM2ログとPM2ログ
- 25. Pythonのログ:INFO、DEBUGログが
- 26. Mailgunのログのタイムゾーンを変更する
- 27. ログ
- 28. ログ
- 29. アプリケーションログではなくApacheログにログを出力する
- 30. Pythonでのログ変換とインデックスの変更
形式に応じて、あなたのYMログがでている、あなたはここで提供される解決策のうちのいくつかの走行距離を取得することがあります。http://li-ma.blogspot.com/2008/10 /pidgin-log-file-to-adium-log-converter.html – bernie