1

Во-первых, я должен отметить, что я довольно новичок в написании сценариев, но я достаточно хорошо разбираюсь в Ubuntu, так что я не против запачкать руки ...

У меня есть небольшой скрипт, который выполняет простой просмотр каталога и, когда он находит новый файл в каталоге, копирует этот файл в другой каталог. Сценарий, который я использую, выглядит следующим образом:

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

while [ 1 ]
do
  echo 'Watching directory: '$WATCHED_DIR 'for new files'
  while file=$(inotifywait -q -e create "$WATCHED_DIR" --format "%f")
  do
    echo 'New file to upload to moonback' $file
    notify-send -i "gtk-go-up" "Complete Folder Monitor" "Uploading file $file"

    #rsync goes here
    sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/

    notify-send -i "gtk-home" "Complete Folder Monitor" "File uploaded."
  done
done

Это модификация скрипта, которую я нашел здесь: http://www.webupd8.org/2010/11/script-to-watch-folder-and-upload-new.html

У меня есть несколько вопросов по поводу сценария. Прежде всего ... это лучший способ сделать то, что я пытаюсь сделать? Как я уже сказал, все работает отлично, но я всегда открыт для новых идей. Примечание: каталог назначения является общим ресурсом SMB на компьютере с Windows 7.

Во-вторых ... как лучше всего запустить этот скрипт при запуске? Прямо сейчас я вошел в экран "Startup Applications" и добавил новую запись, которая запускает эту строку «gnome-terminal -e /script.sh», которая работает, но не кажется идеальной. Я попытался добавить скрипт в папку init.d и запустить update-rc.d, а также добавить скрипт в /etc/rc.local, но ни один из них не сработал (я не получил никаких ошибок, но скрипт не запускался после перезагружать).

Наконец ... есть ли способ изменить этот сценарий, чтобы он также удалялся из места назначения при удалении из источника? Сценарий запускается только тогда, когда файлы добавляются, но не удаляются, и хотя часть rsync будет удаляться из места назначения при удалении из источника, он не будет делать это до тех пор, пока не будет добавлен новый файл. (надеюсь, что этот пункт имеет смысл).

2 ответа2

1

На ваши вопросы ...

  1. Это будет работать достаточно хорошо. Если вы хотите стать модным , посмотрите в Famd.
  2. Добавьте его в конец /etc/rc.local или создайте надлежащие сценарии инициализации в соответствии со стандартным методом вашего дистрибутива.
  3. Опция --delete для rsync должна сделать это уже.
1

Я бы сделал что-то вроде этого:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .