web-dev-qa-db-ja.com

Dropboxフォルダーに読み込まれたときにinotifywaitを使用してファイルを移動する

CentOSのドロップボックスに表示されたらすぐにファイルを別のフォルダーに移動する方法を探しています。

いくつかの手がかりを求めてインターネットを調べましたが、inotifyを使用して、ファイルを表示されたとおりに処理するスクリプトを呼び出す必要があるという事実以上のことはできません。

私のBASHの知識は非常に限られているので、これをPHPで記述できるかどうかは疑問です。

つまり、inotifyを使用して表示されたらすぐにファイルを別のフォルダーに移動するにはどうすればよいですか?

12
Ortix92

これは簡単なアプローチです。

#!/usr/bin/env bash

dir=/home/ortix/Dropbox/new/
target=/home/ortix/movedfiles/

inotifywait -m "$dir" --format '%w%f' -e create |
    while read file; do
        mv "$file" "$target"
    done

移動したいファイルのタイプについての詳細を使用して、チェック、ロギングなどを追加できます...

13
jasonwryan

コマンドinotifywaitは、指定されたディレクトリの内容が変更されるたびにメッセージを出力します。適切なイベントを選択する必要があります。ファイルが作成されたときではなく、Dropboxがファイルのダウンロードを完了したときです。 Dropboxがどのように動作するのか正確にはわかりません。最終的な場所でファイルに書き込む場合は、close_writeイベント。ファイルに一時的な場所に書き込んだ後、ファイルを所定の場所に移動する場合は、moved_toイベント。オプションを渡す-m -qからinotifywaitまで、イベントをリッスンし続け(デフォルトでは、次のイベントのみを待機)、関連するメッセージのみを出力します。

cd ~/Dropbox/myfolder
inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do
  cp -p "$file" /path/to/other/directory
done