首先,我应该说明一下,我对编写脚本还很陌生,但是我对 ubuntu 很了解,所以我不介意亲自动手...
我有一个小脚本,它执行简单的目录监视,当它在目录中发现新文件时,将该文件复制到另一个目录。我使用的脚本如下所示:
/bin/sh #!/bin/sh 复制代码 # sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Complete/ /media/complete/ 虽然 [ 1 ] 做 echo ‘监视目录:‘$WATCHED_DIR’,查找新文件’ 当文件=$(inotifywait-q-e创建“$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/ notify-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
对于您的问题...
- 这会相当有效。如果你想要更花哨一点,可以看看家族。
- 将其添加到末尾
/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