在 运行 脚本之前使用 inotifywait(或替代方法)等待 rsync 传输完成?
Using inotifywait (or alternative) to wait for rsync transfer to complete before running script?
我想设置 inotifywait 以便它监视一个文件夹,当有东西被复制到这个文件夹时(使用 rsync 的 lsyncd)新文件夹。
我一直在网上搜索是否有人在这样做,但我发现的不多。
虽然我了解一些基础知识,但我并不是最精通 bash 脚本的人。
这是我发现的一个小脚本,它会暂停一秒钟,但每次传输仍会触发十几个事件:
EVENTS="CLOSE_WRITE,MOVED_TO"
if [ -z "" ]; then
echo "Usage: [=11=] cmd ..."
exit -1;
fi
inotifywait -e "$EVENTS" -m -r --format '%:e %f' . | (
WAITING="";
while true; do
LINE="";
read -t 1 LINE;
if test -z "$LINE"; then
if test ! -z "$WAITING"; then
echo "CHANGE";
WAITING="";
fi;
else
WAITING=1;
fi;
done) | (
while true; do
read TMP;
echo $@
$@
done
)
我很乐意提供更多详细信息或信息。
谢谢。
根据您要执行的操作,您可能需要查看 Watchman 提供的工具。
有两个可能对您最有用:
如果您想在文件同步后启动一些操作,您可能想尝试使用 watchman-make。如果操作是 运行 像 make
这样的工具,那么这是最合适的,工具本身将查看树并产生它的输出(换句话说:你不需要传递精确的更改文件的列表直接发送到您的工具)。你可以用 运行 一些其他工具代替 make。有一个 --settle
选项,您可以使用该选项让它在收到最新文件更改通知后稍等片刻,然后再执行您的工具。
watchman-make --make='process-folder.sh' -p '**/*.*'
watchman-wait is more closely related to inotifywait
. It also waits for changes to settle before reporting files as changed, but because this tool doesn't coalesce multiple different file changes into a single event, the settle period is configured as a property of the tree being watched 而不是作为命令行参数
免责声明:我是守望者的创造者
我想设置 inotifywait 以便它监视一个文件夹,当有东西被复制到这个文件夹时(使用 rsync 的 lsyncd)新文件夹。
我一直在网上搜索是否有人在这样做,但我发现的不多。
虽然我了解一些基础知识,但我并不是最精通 bash 脚本的人。
这是我发现的一个小脚本,它会暂停一秒钟,但每次传输仍会触发十几个事件:
EVENTS="CLOSE_WRITE,MOVED_TO"
if [ -z "" ]; then
echo "Usage: [=11=] cmd ..."
exit -1;
fi
inotifywait -e "$EVENTS" -m -r --format '%:e %f' . | (
WAITING="";
while true; do
LINE="";
read -t 1 LINE;
if test -z "$LINE"; then
if test ! -z "$WAITING"; then
echo "CHANGE";
WAITING="";
fi;
else
WAITING=1;
fi;
done) | (
while true; do
read TMP;
echo $@
$@
done
)
我很乐意提供更多详细信息或信息。
谢谢。
根据您要执行的操作,您可能需要查看 Watchman 提供的工具。
有两个可能对您最有用:
如果您想在文件同步后启动一些操作,您可能想尝试使用 watchman-make。如果操作是 运行 像
make
这样的工具,那么这是最合适的,工具本身将查看树并产生它的输出(换句话说:你不需要传递精确的更改文件的列表直接发送到您的工具)。你可以用 运行 一些其他工具代替 make。有一个--settle
选项,您可以使用该选项让它在收到最新文件更改通知后稍等片刻,然后再执行您的工具。watchman-make --make='process-folder.sh' -p '**/*.*'
watchman-wait is more closely related to
inotifywait
. It also waits for changes to settle before reporting files as changed, but because this tool doesn't coalesce multiple different file changes into a single event, the settle period is configured as a property of the tree being watched 而不是作为命令行参数
免责声明:我是守望者的创造者