68user's page 掲示板

Prev< No. 4960〜4978> Next  [最新発言に戻る] [過去ログ一覧]
No. 4960 # 谷口 功 [E-mail] 2009/02/27 (金) 18:25:50
SE募集の件で書き込みさせていただきました。
大変興味がありますので、一度詳細を教えていただけないでしょうか。
ご連絡をお待ちしています。

No. 4961 # 68user 2009/02/28 (土) 00:14:30
ありがとうございます。メールを送ります。

No. 4974 # べた 2009/03/19 (木) 19:53:35
Perlで、前日のAM9時以降に作成されたファイルを
取得したいのですが、どのようにPerlを書けばよい
のでしょうか。

Perlのシェルスクリプトを起動する前日のAM9以降
から、実行日までの間に作成されたファイルを取得
したいのです。

実行日の前日の9時というのは以下の方法で取得できる
のですが、取得した日付とファイル作成日付を比較し、
対象か否かを判断して、必要なものだけを取得する
方法が分かりません。
どのよに書けばよいのでしょうか。


「実行日の前日の9時」は、
--------------------------------
#!/usr/local/bin/perl

$tm = time - (24 * 60 * 60 * 1);
($sec, $min, $hour, $day, $mon, $year) = (localtime($tm))[0..5];
$now = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$day,$hour,$min,$sec);
print $now, "\n";

--------------------------------
#!/usr/local/bin/perl

use POSIX 'strftime';

$tm = time - (24 * 60 * 60 * 1);
my $now = strftime "%Y/%m/%d %H:%M:%S", localtime($tm);
print $now, "\n";

No. 4975 # べた 2009/03/19 (木) 19:57:17
>> 4974

環境を書き忘れました。

環境は、
    Solaris8
    Perl v5.8.5

No. 4976 # 68user 2009/03/21 (土) 00:36:01
>>4974 べた
>>4975 べた
Solaris なら適当なファイルを作って、touch コマンドでタイムスタンプを
前日 08:59:59 にしておいて、find . -newer foo とするのが一番簡単かと
思います。

FreeBSD なら find -mtime -99h とか、Linux なら find -mmin -9999 とか
できますが (99 や 9999 は計算して求める)、結局は -newer の方が簡単な
気がします。

モジュール使うなら
    File::Find
        http://perldoc.perl.org/File/Find.html
    File::Find::Rule
        http://search.cpan.org/~rclamp/File-Find-Rule-0.28/lib/File/Find/Rule.pm
あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと
いけないように見えますので、イマイチですね。

No. 4977 # べた 2009/03/22 (日) 23:25:34
>>4976 68user

ありがとうございます。
また、返事が遅くなって申し訳ありません。

> find . -newer foo
ですか。
シェルで、findの結果を取得することも考えました。

> あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと
> いけないように見えますので、イマイチですね。
Perlを使おうとしていたので、手で書かなくてはいけないと思っていました
この部分の良い方法が実現できなくて。

環境上、教えて頂いたモジュールも入れることができません。

No. 4978 # 68user 2009/03/23 (月) 22:00:19
>>4977 べた
find . -newer foo の方法を書いておきます。find を使わないなら、
昨日9時の日時 (20090323090000) を Time::Local で epoch time に
直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。

------
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()-60*60*24);
my $timestamp = sprintf("%04d%02d%02d%02d%02d.%02d", $year+1900, $mon+1, $mday, 9, 0, 0);
my $yeasterday_9am_file = "foo.txt";
system("touch -t $timestamp $yeasterday_9am_file");
open(IN, "find . -type f -newer $yeasterday_9am_file |");
while (<IN>){
        chomp;
        print "$_\n";
}

Prev< No. 4960〜4978> Next  [最新発言に戻る] [過去ログ一覧]