#!/usr/bin/perl -w # # dirseiri.pl # # カレントディレクトリのファイルを整理するスクリプト # # . から始まるファイルは除外 # dontmovedir で指定されたファイル・ディレクトリは除外 # filelimitday(=7日)以上経過したファイル、dirlimitday(=2年)以上経過したディレクトリのみ移動対象 # # ファイルの更新時刻(月)ごとのディレクトリ(YYYYMM)を作成し、移動する # # # 2005/10/19 rev 0.1 nakax use strict; # 移動したくないディレクトリ/ファイルを指定 my $dontmovedir = '^Xrootenv|^software$|^bat$|^src$|^wget$|^pixmaps$|^rpm$|^Desktop$|^GNUstep$|^Mail$|^bin$|^crontabs$|^etc$|^log$|^memo$|^nakax$|^ols$|^public_html$|^private$|^scriptlog$|^shell$|^vmware$|^wav$|^tmp$|^work$'; # 移動対象経過時間(日) my $filelimitday = 7; my $dirlimitday = 365 * 2; # 比較対象時間:現在 my $nowtime = time(); opendir(DIR,".") || die "cannot opendir curdir(.) : $!\n"; while(defined(my $file = readdir(DIR))){ next if($file =~ /^\./); # 先頭が . で始まるファイルは除外 next if(-d $file && $file =~ /^\d{8}$/); # YYYYMMDD ディレクトリは除外 next if(-d $file && $file =~ /^\d{6}$/); # YYYYMM ディレクトリは除外 next if(-d $file && $file =~ /^\d{4}$/); # YYYY ディレクトリは除外 my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($file); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime); my $YYYYMM = sprintf("%04d%02d",$year + 1900,$mon + 1); my $passdays = ($nowtime - $mtime) / (24*60*60); next if(-d $file && $passdays < $dirlimitday); # 30日未満のディレクトリ next if(-f $file && $passdays < $filelimitday); # 7日未満のファイル next if($file =~ $dontmovedir); # 除外対象ファイル printf("%04d/%02d/%02d %02d:%02d:%02d %s",$year + 1900, $mon+1, $mday, $hour, $min, $sec,$file); print '/' if(-d $file); printf "\n"; printf "\t#mv %s %s #(%s days later)\n",$file,$YYYYMM,$passdays; if(! -d $YYYYMM){ mkdir($YYYYMM) || die "cannot mkdir $YYYYMM : $!\n"; } rename($file,$YYYYMM.'/'.$file) || die "cannot rename $file to $YYYYMM/$file : $!\n"; } closedir(DIR);