首先,我應該指出,我對編寫腳本還很陌生,但我對 ubuntu 非常了解,所以我不介意弄髒我的手...
我有一個小腳本,它執行簡單的目錄監視,當它在目錄中找到新檔案時,將該檔案複製到另一個目錄。我正在使用的腳本如下所示:
#!/bin/sh # sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/ 而[1] 做 echo '監視目錄:'$WATCHED_DIR '新檔案' while file=$(inotifywait -q -e create "$WATCHED_DIR" --format "%f") 做 echo '要上傳到 Moonback 的新檔案' $file notification-send -i "gtk-go-up" "完整資料夾監視器" "上傳檔案 $file" #rsync 放在這裡 sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/ 通知發送-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
對於您的問題...
- 這會工作得相當好。如果你想變得花哨,看看法姆德。
- 將其添加到末尾
/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