ウォッチディレクトリスクリプトのヘルプ

ウォッチディレクトリスクリプトのヘルプ

まず、私はスクリプトの作成にかなり不慣れですが、Ubuntu の使い方は十分に理解しているので、自分で手を動かすことは気になりません...

簡単なディレクトリ監視を行い、ディレクトリ内に新しいファイルを見つけたらそのファイルを別のディレクトリにコピーする小さなスクリプトがあります。私が使用しているスクリプトは次のようになります。

#!/bin/sh
#
sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

一方 [ 1 ]
する
  echo 'ディレクトリ: '$WATCHED_DIR 'で新しいファイルを監視しています'
  ファイル=$(inotifywait -q -e create "$WATCHED_DIR" --format "%f") の場合
  する
    echo 'moonback にアップロードする新しいファイル' $file
    通知送信 -i "gtk-go-up" "完全なフォルダモニター" "ファイル $file をアップロードしています"

    #rsync はここにあります
    sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

    notification-send -i "gtk-home" "完全なフォルダーモニター" "ファイルがアップロードされました。"
  終わり
終わり

これはここで見つけたスクリプトの修正版です:http://www.webupd8.org/2010/11/script-to-watch-folder-and-upload-new.html

スクリプトについていくつか質問があります。まず、これは私がやろうとしていることを実行するための最善の方法でしょうか? 前にも言ったように、これは問題なく動作しますが、私は常に新しいアイデアを歓迎します。注: 宛先ディレクトリは、Windows 7 マシン上の SMB 共有です。

次に、起動時にこのスクリプトを実行する最適な方法は何でしょうか? 現在、「スタートアップ アプリケーション」画面に入り、この行「gnome-terminal -e /script.sh」を実行する新しいレコードを追加しましたが、これは機能しますが、理想的ではないようです。スクリプトを init.d フォルダーに追加して update-rc.d を実行し、スクリプトを /etc/rc.local に追加してみましたが、どちらも機能しませんでした (エラーは発生しませんでしたが、再起動後にスクリプトが実行されませんでした)。

最後に...このスクリプトを変更して、ソースから削除されたときに宛先からも削除されるようにする方法はありますか? スクリプトは、ファイルが削除されるのではなく追加されたときにのみ実行され、rsync 部分はソースから削除されたときに宛先から削除されますが、新しいファイルが追加されるまでは削除されません。(この段落が意味をなすことを願っています)。

答え1

ご質問については...

  1. これはかなりうまくいきます。もっと凝ったことをしたい場合は、有名
  2. これを末尾に追加する/etc/rc.localか、ディストリビューションの標準的な方法に従って適切な init スクリプトを作成します。
  3. オプション--deletersyncすでにそれを実行するはずです。

答え2

私は次のようなことをします:

cd directory2watch
# watching SUBdirectories
inotifywait --monitor --recursive *|
        while read path action file
        do
                # To get an idea of possible actions that will be
                # reported:
                echo path=$path action=$action file=$file
                # Decide on a followup base on $action:
                case $action in
                  "DELETE") ...
                          ;;
                  "CLOSE_WRITE,CLOSE")
                          ...
                          ;;
                esac

        done

関連情報