2013年1月1日火曜日

[Perl]ファイルの日付

ファイルの作成日を取得、1週間前に作成したファイルを見つける
use strict;
use utf8;

# フォルダ内のファイル一覧を取得
my $dir = "."; # current directory
my $file;
my @fileList;

opendir(DH, $dir) or die "$dir:$!";
while ($file = readdir DH) {
        next if ($file =~ /^\.+$/);
        print "$file\n";
        push(@fileList, $file);
}
closedir(DH);
print "\@fileList = @fileList\n";
print "====================\n\n";

# ファイルのアクセス日時, 更新日時, 作成日時を取得する
foreach $file (@fileList) {
        my $accessTime = (stat($file))[8];
        my $modifyTime = (stat($file))[9];
        my $createTime = (stat($file))[10];
        print "$file\n";
        print " access time: " . localtime($accessTime) . "\n";
        print " modify time: " . localtime($modifyTime) . "\n";
        print " create time: " . localtime($createTime) . "\n";
}
print "====================\n\n";

# 1 週間以前に作成されたファイルを見つける
my $oneWeekAgo = time() - (7 * 24 * 60 * 60);
foreach $file (@fileList) {
        my $createTime = (stat($file))[10];
        print "$file\n";
        print " create time: " . localtime($createTime) . "\n";
        if ($oneWeekAgo >= $createTime) {
        print " -----> old\n";
        }
}
実行結果
> perl test00.pl
sample.txt
sample2.txt
test00.pl
@fileList = sample.txt sample2.txt test00.pl
====================

sample.txt
 access time: Fri Aug 24 08:43:53 2012
 modify time: Wed Aug 22 20:32:00 2012
 create time: Mon Aug 20 14:03:49 2012
sample2.txt
 access time: Fri Aug 24 08:51:05 2012
 modify time: Wed Aug 22 20:32:00 2012
 create time: Tue Aug 7 08:51:05 2012
test00.pl
 access time: Fri Aug 24 08:41:40 2012
 modify time: Fri Aug 24 08:54:43 2012
 create time: Fri Aug 24 08:41:40 2012
====================

sample.txt
 create time: Mon Aug 20 14:03:49 2012
sample2.txt
 create time: Tue Aug 7 08:51:05 2012
 -----> old
test00.pl
 create time: Fri Aug 24 08:41:40 2012
今日の日付を付加してバックアップファイルを作成する
use strict;
use utf8;
use File::Copy;

# フォルダ内のファイル一覧を取得
my $dir = "."; # current directory
my $file;
my @fileList;

opendir(DH, $dir) or die "$dir:$!";
while ($file = readdir DH) {
        next if ($file =~ /^\.+$/);
        print "$file\n";
        push(@fileList, $file);
}
closedir(DH);
print "\@fileList = @fileList\n";
print "====================\n\n";

# 今日の日付を付加してバックアップファイルを作成

# 今日の日付を取得
my ($day, $month, $year);
($day, $month, $year) = (localtime(time))[3..5];
$year += 1900;
$month += 1;
my $todayStr = sprintf("%04d%02d%02d", $year, $month, $day);
print "\$todayStr: " . $todayStr . "\n";
print "====================\n\n";

# 対象ファイルをコピー
foreach $file (@fileList) {
        print "$file\n";
        # "数値付き = backup ファイル" は除く
        next if ($file =~ /\_\d+\.txt$/);

        # txt ファイルが対象
        if ($file =~ /txt$/) {
        # . を探す
        my $idx = index($file, ".");
        print " \$idx = " . $idx . "\n";
        my $name = substr($file, 0, $idx);
        $name = $name . "_" . $todayStr . ".txt";
        print " " . $name . "\n";

        # ファイルをコピー
        File::Copy::copy($file, $name);
        }
}
実行結果
> perl test01.pl
sample.txt
sample2.txt
test01.pl
@fileList = sample.txt sample2.txt test01.pl
====================

$todayStr: 20120824
====================

sample.txt
 $idx = 6
 sample_20120824.txt
sample2.txt
 $idx = 7
 sample2_20120824.txt
test01.pl

0 件のコメント:

コメントを投稿