inotifywait + rsync 同步文件夹
inotifywait + rsync 同步文件夹
需求:
我有一个文件夹,里面有一些代码和笔记,我想同步备份一个,免得又不小心弄丢了。
代码:
将Home目录下的code document myconfig go bin
目录同步备份到 /store/share
下
#!/bin/bash
# 避免注销后登入,又运行一次。
# 后来我发现多余的,gnome注销后,自启动的程序全部退出了。可以注销后,进入字符界面,pgrep看看就知道了。
# pgrep inotifywait
# if [ $? == '0' ] ; then
# exit
# fi
cd $HOME
srcs=("code" "document" "myconfig" "go" "bin")
dst=/store/share
inotifywait -m -r \
--timefmt '%y-%m-%d %H:%M:%S' \
-e delete,create,attrib,close_write,move \
--exclude "(.*\.swx|.*\.swp|.*~|.*\.goutputstream-*|4913|__.*|/\.|liteide.*|Sourcetrai.*)" \
--format "%T %:e %f" ${srcs[*]} | while read line
do
for x in ${srcs[*]}
do
rsync -aHXA --delete $x $dst
done
done
# inotifywait:
# -m 持续监视
# -r 包含子目录
# --exclude "(.*\.swx|.*\.swp|.*~|.*\.goutputstream-*|4913|__.*|/\.)" \
# 这里要说明一下的是:
# /\. 对应于排除隐藏文件,即.开头的文件。
# 4913是vim不知道为什么要创建又立马删除的文件,假如有4913,它就会创建5036
# rsync:
# -a, --archive
# 该选项等价于"-rlptgoD"选项的组合。它表示使用归档模式并保留几乎所有属性(明显遗漏了"-H"选项)。
# 上面的等价选项的唯一例外是指定了"--files-from"选项,它使得"-r"选项被强 制忽略。
# 注意,"-a"选项不保留硬链接属性。
# -H, --hard-links preserve hard links 保持硬连接
# -X, --xattrs
# 使目标文件的扩展属性和源文件的扩展属性保持一致。
# -A, --acls
# 使目标文件的ACL属性和源文件的ACL属性一致。
gnome自启动:
- 将上述代码保存到
~/bin/wait-rsync.sh
- 运行
gnome-tweak
,自启动那里添加终端。 - 修改
.config/autostart/org.gnome.Terminal.desktop
中的一行:Exec=/home/xxxx/bin/wait-rsync.sh
bug fix:
- bug:不可以再添加终端。既然这样,干脆新建一个文件
gnome-start.sh
- 将上面desktop文件中的
wait-rsync.sh
修改为gnome-start.sh
- 然后,将
wait-rsync.sh
等需要自启动的,都依次加到gnome-start.sh
:
#!/bin/bash
wait-rsync.sh&
tilda -g ~/.config/tilda/config_F7 >> /dev/null&
tilda -g ~/.config/tilda/config_F8 >> /dev/null&
tilda -g ~/.config/tilda/config_F9 >> /dev/null&
tilda -g ~/.config/tilda/config_F10 >> /dev/null&
tilda -g ~/.config/tilda/config_F3 >> /dev/null&
tilda -g ~/.config/tilda/config_F4 >> /dev/null&