First, I should note that I am pretty new to writing scripts, but I know my way around ubuntu well enough that I don't mind getting my hands dirty...
I have a small script, which does a simple directory watch and when it finds a new file in the directory, copies that file to another directory. The script I am using looks like this:
#!/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") делать echo 'Новый файл для загрузки на moonback' $file notify-send -i "gtk-go-up" "Полный мониторинг папки" "Загрузка файла $file" #rsync идет сюда sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/ notify-send -i "gtk-home" "Полный мониторинг папки" "Файл загружен." сделанный сделанный
Это модификация скрипта, который я нашел здесь: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 удалит из места назначения при удалении из источника, она не сделает этого, пока не будет добавлен новый файл. (надеюсь, этот абзац имеет смысл).
решение1
Для ваших вопросов...
- Это будет работать достаточно хорошо. Если вы хотите получить что-то необычное, посмотритесемья.
- Добавьте его в конец
/etc/rc.local
или создайте соответствующие скрипты инициализации в соответствии со стандартным методом вашего дистрибутива. - Опция уже
--delete
должнаrsync
это делать.
решение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