簡単に言えば、与えられたファイルのサイズが最後の確認以降に変更されたかどうかを定期的に確認するbashの単純なループが必要です。
簡単に言えば、ファイルをダウンロードします。マイファイル.txtFirefoxを使用してください。私注文するダウンロードが完了した後。 Firefoxは私が使用できるdbus呼び出しを提供していないようです。上記の機能を備えたいくつかの追加機能がありますが、かなり安定したソリューションが必要でした。それで、bashスクリプトを実行して定期的に確認できると思いました。マイファイル.txt時間の経過とともに変化したり安定したファイルは5MB未満のテキストファイルで、ダウンロードされます。地元のしたがって、非常に信頼性が高く、ダウンロードを線形に実行する必要があります(切断、サーバーの問題などはありません)。
このような単純なbashスクリプトを書くのに役立ちますか?ファイルを検索する頻度は、作業を効率的に実行する上で重要な要素のようです。前述したように、これは5mb未満のテキストファイルですが、10kbほど小さく、SSDドライブに常駐できます。
また、これを達成するより良い方法がありますか?前述したように、私はLinux上で動作し、最小限の依存関係を持つ安定したソリューションが必要でした。たぶんダウンロードマネージャですか?それともファイル監視デーモンはありますか?それともこれにファイルシステムAPIを提供しますか?または、サイズの代わりにアクセス時間を使用しますか?
答え1
ファイルを開く唯一のものがダウンロードを実行するプログラムであると仮定すると、次のコマンドは
/usr/sbin/lsof path/to/your/file | wc -l
ファイルがまだ開いている場合は2を返し、誰もファイルを開かない場合は0を返す必要があります。
最初の行は列ラベルのリストで、2 番目の行はファイルの状態の行なので、2 つです。
ダウンロードが完了したら、誰もファイルを開いてはいけません。
結果は世論調査に使用できます。
lsof
通常はadminコマンドなので、フルパスが必要です/usr/sbin
。スーパーユーザーだけが利用できるオプションがあるかもしれませんが、これはそのうちの1つではありません。
答え2
ファイルが変更されないまで待ちたい場合は、次のようにします。
size=0
size2=$(stat --printf=%s $filename)
while [ $size != $size2 ]
do
sleep 5
size=$size2
size2=$(stat --printf=%s $filename)
done
一部のCコードを書くことができる場合は、CLOSEイベントのアクションをトリガーできるinotify(7)呼び出しセットを使用すると便利です。