2016-04-09 5 views
0

の最後の変更されたファイルを読み込みますこれはgammu/inboxディレクトリにperlスクリプトで格納されています。は私が受信したSMSのためのツールを持っていると私は最後に変更されたファイルの内容を提供したいperlの</p> <p>でディレクトリの最後の変更されたファイルの内容を読むことができますどのようにperlの

たとえば、フォルダ内の新しいsms(gammu/inbox)がチェックされているかどうかをチェックし、最後のsmsからコンテンツを出します。あなたは、リストの最初の要素よりも

use File::DirList; 
my @list = File::DirList::list('your_directory', 'M'); 

でファイルの順序付きリストを取得する必要があり

答えて

2

-Mファイルテスト演算子を使用して、各ファイルの年齢に応じてディレクトリを並べ替えます。最後に変更されたファイルがリストの最初に表示されます

このプログラムは原則を示しています。現在の作業ディレクトリ内の最新のファイルを見つけてその名前を出力し、それを開きます。

cwd以外のディレクトリでこれを実行したい場合は、おそらくchdirにするのが最も簡単でしょう。あなたはかなりのディレクトリで作業している場合は、こののように時間がかかる場合があり-M

use strict; 
use warnings 'all'; 
use feature 'say'; 

my $newest_file = do { 
    opendir my $dh, '.' or die $!; 
    my @by_age = sort { -M $a <=> -M $b } grep -f, readdir $dh; 
    $by_age[0]; 
}; 

say $newest_file; 

open my $fh, '<', $newest_file or die qq{Unable to open "$newest_file" for input: $!}; 

を使用する前に、各ファイルへの完全なパスを構築する必要があります、その後として、opendir特定のディレクトリにしようとするよりも、 stat操作が非常に遅いです。あなたは維持、あなたが本当に、そしてちょうどファイルの単一パスを高速に行う何かをしたい場合はstatは、各ファイル

my $newest_file = do { 

    opendir my $dh, '.' or die $!; 

    my @by_age = map $_->[0], 
    sort { $a->[1] <=> $b->[1] } 
    map [ $_, -M ], readdir $dh; 

    $by_age[0]; 
}; 

のために一度だけ呼び出されることシュワルツはそう変換を用いたことで、この多くを向上させることができます今まで発見された最新のトラック。このように

my $newest_file = do { 

    opendir my $dh, '.' or die $!; 

    my ($best_file, $best_age); 

    while (readdir $dh) { 

     next unless -f; 
     my $age = -M _; 

     unless (defined $best_age and $best_age < $age) { 
      $best_age = $age; 
      $best_file = $_; 
     } 
    } 

    $best_file; 
}; 
+0

このスクリプトで私は最後のSMSを参照してください、その後、私はこのSMSの内容は受信しませんでした。ありがとう – perlfg

+1

@perlfg:ファイルを開いて印刷する方法を伝える必要がありますか? – Borodin

+0

いいえ:)私は常にsmsを受け取り、最後のsmsの内容をperlでエコーします – perlfg

0

は、あなたが探しているものです。

あなたはライブラリの詳細を読むことができ、ここでFile::DirList

+0

これは多くの理由で機能しません。あなたは明らかにそれをテストしていません。 – Borodin

+0

はい、それは動作しません – perlfg

関連する問題