使用 inotifywait 和 ssh 进行目录镜像的脚本
Script for directory mirroring with inotifywait and ssh
我有一个脚本试图将特定目录从本地服务器镜像到远程服务器。看起来像这样:
inotifywait -mr --format '%w%f' -e close_write -e moved_to -e delete /mydir | \
while read FILECHANGE
do
if [ -f $FILECHANGE ]
then
rsync --bwlimit=4096 --progress --relative -vrae 'ssh -p 22' $FILECHANGE $REMOTEHOST:/
else
ssh -p 22 $REMOTEHOST "rm $FILECHANGE"
fi
done
在创建多个文件的情况下,例如触摸命令:
touch 1 2 3
3个文件都传好了
但是如果我一次删除多个文件:
rm -f 1 2 3
只删除第一个。
如果我只用 echo $FILECHANGE
替换 ssh 命令,这 3 个文件会很好地显示在控制台中。所以看起来问题来自ssh命令,但我无法解释原因并解决它。
谁有想法?
好吧,我发现了问题:当 运行 时,ssh 命令似乎正在吃掉 inotifywait 命令的输出。所以,为了防止这种情况,我在 ssh 之后添加了 0<&- 重定向,以关闭标准输入。
inotifywait -mr --format '%w%f' -e close_write -e moved_to -e delete /mydir | \
while read FILECHANGE
do
if [ -f $FILECHANGE ]
then
rsync --bwlimit=4096 --progress --relative -vrae 'ssh -p 22' $FILECHANGE $REMOTEHOST:/
else
ssh -p 22 $REMOTEHOST "rm $FILECHANGE" 0<&-
fi
done
现在可以了。
我有一个脚本试图将特定目录从本地服务器镜像到远程服务器。看起来像这样:
inotifywait -mr --format '%w%f' -e close_write -e moved_to -e delete /mydir | \
while read FILECHANGE
do
if [ -f $FILECHANGE ]
then
rsync --bwlimit=4096 --progress --relative -vrae 'ssh -p 22' $FILECHANGE $REMOTEHOST:/
else
ssh -p 22 $REMOTEHOST "rm $FILECHANGE"
fi
done
在创建多个文件的情况下,例如触摸命令:
touch 1 2 3
3个文件都传好了
但是如果我一次删除多个文件:
rm -f 1 2 3
只删除第一个。
如果我只用 echo $FILECHANGE
替换 ssh 命令,这 3 个文件会很好地显示在控制台中。所以看起来问题来自ssh命令,但我无法解释原因并解决它。
谁有想法?
好吧,我发现了问题:当 运行 时,ssh 命令似乎正在吃掉 inotifywait 命令的输出。所以,为了防止这种情况,我在 ssh 之后添加了 0<&- 重定向,以关闭标准输入。
inotifywait -mr --format '%w%f' -e close_write -e moved_to -e delete /mydir | \
while read FILECHANGE
do
if [ -f $FILECHANGE ]
then
rsync --bwlimit=4096 --progress --relative -vrae 'ssh -p 22' $FILECHANGE $REMOTEHOST:/
else
ssh -p 22 $REMOTEHOST "rm $FILECHANGE" 0<&-
fi
done
现在可以了。