- ベストアンサー
フォルダ内のファイルの最新
CGIでできるのかどうか判らないのですが あるフォルダ内に 幾つかのファイルがあったとします 例えば画像です 拡張子は.jpg.gif.bmp と色々です それでそのフォルダは更新なり、追加、削除されていくと仮定します そこで、PEALのなんらかの式で このフォルダ内から日付の新しい3つを常に引っ張り出すような文法式ってないですかね? 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
OS がわからないので、UNIX と仮定して回答しますね。 全部を Perl で書こうとすれば、No.1 さんのおっしゃるようなやり方になると思いますが、こんな処理は、他のツールの助けを借りた方が早いです。 open(I, "ls -t *.jpg *.gif *.bmp|head -3|"); while (<I>) { chop; print "$_\n"; } close(I); で、いかがでしょう。これで、最新の3ファイル名を表示しています。 「ファイルを新しい順に表示する」処理と、「それの上から3つを取り出す」処理を、他のコマンドに任せています。 この方が、ずっと簡単だと思いますが、いかがでしょう? もちろん、上記のは単なるサンプルプログラムです。 実際には、エラーチェックを入れたり、セキュリティに配慮したりする必要がありますが、取りあえず説明は省きます。
その他の回答 (2)
- okiyoshi
- ベストアンサー率34% (11/32)
=notes > 新しい3つを常に引っ張り出すような文法式・・ 文法式・・が何を想定しているか分かりませんので外しているかもしれませんが、No.1さんのおっしゃる面倒さを乗り越えて・・Perlの一例です。 $dirの値は自分のフォルダに合わせてください。 また、%fileや@lastなど、データの大きさには注意が必要かと思います。 でも、No.2さんのおっしゃるとおり、やっぱり遅いですかね。 ま、秋の夜長の勉強ということで拙文はご勘弁を・・ =cut use strict; # 対象フォルダの定義 my $dir = "."; # フォルダ内のファイルについて、最終更新時刻をキーとしたハッシュを作成 my %file = map { (stat($_))[9], $_ } grep -f, glob( "$dir/*" ); # ハッシュのキーを降順にソート my @last = sort { $b <=> $a } keys %file; # 最新の三つを取り出す @last = splice( @last,0,3 ); # 取り出したファイル名の確認出力 print map { "$file{$_}\n" } @last;
お礼
ありがとうっす みなさん参考になりました
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
@jpeg=glob("*.jpg"); とか あるいは、readdir して、 statして更新時間でソートして取り出すのかな ちょっと面倒くさいので WindowsXP環境だったら @files=`dir /A-D /B /O-D`; とすれば、 $files[0] $files[1] $files[2] で最新123ファイルが取り出せる UNIX環境だったらlsを使って同様のことができると思う
お礼
ありがとうっす
お礼
ありがとうっす