我知道有关此主题的数百个问题。但我从来没有找到一个明确的例子。
我创建了两个用户,一个是开发人员,另一个是sftp上传用户。 sftp上传用户应该能够上传文件和文件夹。然后,这些文件应自动同步到开发人员文件夹。 开发人员现在可以处理和编辑文件。 这意味着:当文件被编辑/删除/创建时,同步过程应实现此更改并从sftp镜像到开发人员,反之亦然。
我已经rsync
inotifywait
与rsync
一起尝试,但在一个方向上工作正常,但不是两种方式。然后我偶然发现了一致,在那里我看到可以同步两种方式。现在我发现,只要你使用/home/folder1
就可以设置新的用户/组权限,这会使sftp用户过时。有人可以向我展示协调的示例代码,它会将文件更改/创建/删除的两种方式从/home/folder2
同步到#!/bin/bash
EVENTS="CREATE,CLOSE_WRITE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"
DIR1="/home/dev/project/"
USR1="dev"
DIR2="/home/sftp/uploads/"
USR2="sftp"
while inotifywait -e "$EVENTS" -r "$DIR1"; do
sudo rsync -avu --delete --chown="$USR2":"$USR2" "$DIR1" "$DIR2"
done &
while inotifywait -e "$EVENTS" -r "$DIR2"; do
sudo rsync -avu --delete --chown="$USR1":"$USR1" "$DIR2" "$DIR1"
done &
wait
。
更新 我编写了一个inotifywait bash脚本,它几乎可以按照我想要的方式工作:
mousePressEvent
有一个很大的缺陷:在某些情况下,rsync命令会同时运行,这会破坏文件。
所以我更新了问题:
如何使第一个循环命令仅在第二个循环命令完成时运行,反之亦然?
答案 0 :(得分:0)
我不确定你的意思是什么,"你可以通过unison设置新的用户/组权限。" Unison无法更改setuid
和setgid
位,但Unison 会更改文件所有者和文件组。有关详细信息,请参阅Unison manual中的owner
和group
选项。
通常,您希望让开发人员调用Unison(因为我假设您希望开发人员拥有并控制传输的文件)。然后你应该使用repeat=watch
选项调用Unison,以便Unison的实例将观察sftp文件的任何更改并立即传输它们。