2017-01-17 4 views
-4

私は、さまざまなユーザーがpdf、tifなどのような文書を置くことができるフォルダを持っています。 新しいファイルがあれば毎分このフォルダをチェックします。Linux:ファイルコピーを確認する方法は、ウォッチフォルダで終了しましたか?

しかし、まだコピーされている場合に備えてこのファイルを選択したくありません。 その場合、私は将来のサイクルでそれを選ぶでしょう。

しかし、私は直面している問題があります。 それは私のフォルダ内でファイルのコピーが完了したかどうかを確認する方法は?

私はすでに次のことを試しています。 1)Cプログラムを使用して書き込みモードでファイルを開こうとしました。 しかし、まだコピーされていても書き込みモードで開くことができます。

2)lsofコマンドを使用して、これに関連するプロセスがあるかどうかを確認します。 しかし、このコマンドでは、root以外のユーザーの場合には結果が表示されません。

注:Linuxではroot以外のユーザーになる可能性があります。

+0

で使用するために、たとえば、シェルからhere

例を、それを使用するには、Javaでシェルを経由して、Cで行われた一部明記してくださいでしたがありますスクリプト? – Gerhardh

答えて

0

ファイルがしばらく修正されていない場合は、コピーが終了したと見なすだけで十分です。正解は、ロックのいくつかの種類を称えるために、すべてのプログラムが必要になります

find . -mmin +15 

::プロセスは、ちょうど最後の15分に変更されていないファイル

https://linux.die.net/man/2/flock

+0

15分は長すぎます。 –

1

あなたがのために待機するようにカーネルのinotify機能を使用することができますIN_CLOSE_WRITEイベント。 コピーが終了すると、ファイルハンドルハンドルがプログラムハンドルをトリガーします。

IN_CLOSE_WRITE(+)
ファイルを書き込み用にオープンを閉じました。

例のカップルはどのようにC here

+0

それはファイルが閉じられた理由を教えてくれません。たとえば、ファイルがFTP経由でアップロードされており、接続が失われている場合などです。 * whole *ファイルが確実にコピーされているかどうかを知る必要がある場合は、コピーが完了した後にファイルの名前を変更するなどの方法で通信する必要があります。 –

関連する問題