2013-09-05 11 views
16

linuxのフォルダに作成された新しいファイルを監視しています。今はいつも、 "ls -ltr"を発行しています。しかし、私はそれが自動的にそれを印刷するプログラム/スクリプト、および最新のエントリだけが欲しいです。私はそれをリストするための短いwhileループをしましたが、それは新しいものではなかったエントリを繰り返すでしょう、そして、新しいファイルがないとき、私の画面がロールアップし続けるでしょう。私は私が欲しいものを示していた、「観る」について学び、N秒ごとに更新されますが、私は尾のようなものを探しています、ncursesベースのインターフェイスをしたくないしました:tail-like continuous ls(ファイルリスト)

  • 連続
  • 唯一の新しいもの、私の端末で
  • プリントを示したので、私は何でも私がやっていると混入すべての今して出力をバックグラウンドで実行し、他のことを行うと見ることができます:D

要約を:入力を取得し、前の入力と比較して、新しいものだけを出力します。 そのようなことは、このような奇妙なツールのようには聞こえません。他の状況でも使用されていることがわかります。したがって、すでに存在すると思いますが、何も見つかりませんでした。提案?

+0

あなたが実行しているどのような分布:

このスクリプトはその問題を持っていませんか? –

+2

[dnotify/inotifyコマンドを使用してディレクトリを継続的に監視する方法](http://stackoverflow.com/questions/7566569/how-to-continuosly-monitor-the-directory-using-dnotify-inotify-command) – sehe

+0

私はペパーミントを実行しています。私は 'inotify'を探しています。私はそれを聞いたことがない、明らかにそれは私が望むことをしない、ちょうど私がそれを行うスクリプトをプログラミングするのに役立ちます。 – msb

答えて

9

(は、Debian/Ubuntuの上にある場合はinotify-toolsパッケージから入手可能)を使用すると、inotifywaitへのアクセス権を持っている場合は、このようなスクリプトを記述することができます。

#!/bin/bash 

WATCH=/tmp 

inotifywait -q -m -e create --format %f $WATCH | while read event 
do 
    ls -ltr $WATCH/$event 
done 

これは「勝ったワンライナーです

inotifywait -q -m -e create --format %w%f /some/directory 
+0

ありがとうございました。私はそれをスクリプトにして、パラメーターとして$ WATCHを取得しています。ありがとう! – msb

+0

追加のコメントと同様に、スクリプトはすべての新しいファイルをリストアップしますが、ファイルサイズは通常ゼロです。これは、ファイルが作成された後、コンテンツが追加される前にlsが実行されるためです。私は私の前に眠りを追加し、今はすべて完璧です。 :-)あなた(または私)があなたの答えにそれを加えることができますか? – msb

+2

'-e create'を' -e close_write'に変更するとそれが修正されますか? –

29

あなたはwatch

非常に便利なコマンドを使用することができます。tあなた lsはありませんが、それは、ファイル名をプリントアウトすることが同じ情報を与えます

そして、あなたは10秒ごとにlsを得るでしょう。

tail -10を追加すると、最新の10個しか取得されません。

watch -n 10 "ls -ltr|tail -10" 
+0

これは、クリエイターがファイルの時間を直ちにゼロに変更するファイルを省略します。 –

+0

私の元の質問で述べたように、watchはまさに私が望むものではありません。新しいファイルが十分になく、最後にncursesインターフェースを持っていれば最後のファイルが繰り返されるからです。 : -/ – msb

+0

ああ、申し訳ありません - 私はあなたの興奮の中で、あなたの言いたいことを逃しました。私は多くの時計を使用します。 – opentokix

0

cygwinLinuxで動作します。ファイルを書き込む以前のソリューションの中には、ディスクをスラッシュさせるものがあります。

SIG=1 
SIG0=SIG 
while [ $SIG != 0 ] ; do 
while [ $SIG = $SIG0 ] ; do 
    SIG=`ls -1 | md5sum | cut -c1-32` 
    sleep 10 
done 
SIG0=$SIG 
ls -lrt | tail -n 1 
done 
関連する問題