rsync:保护接收器上的非空目录

rsync: Protect non-empty directories on receiver

我正在尝试 rsync 我的项目文件夹到服务器,其中包括各种源代码等。

rsync "$GOPATH/src/" -rm \
    -f '+ */' \
    -f '+ *.go' \
    -f '+ *.s' \
    -f '+ *.html' \
    -f '+ *.js' \
    -f '+ *.css' \
    -f '+ fonts/*' \
    -f 'P */' \
    -f '- *' \
    myserver:its/gopath/src/

我想删除多余的代码,并尽可能避免在接收器上创建目录。但是,通过提供 -m--prune-empty-directories 选项,我收到警告,指出接收器上的目录不为空。

*deleting github.com/anacrolix/jitter/.git/hooks/
cannot delete non-empty directory: github.com/anacrolix/jitter/.git
cannot delete non-empty directory: bitbucket.org/anacrolix/go-utils/bin
*deleting bitbucket.org/anacrolix/go-utils/bin/

我怎样才能避免尝试删除这些目录,或者通过 rsync 标志消除该警告?

解决办法是在-f '+ */'之前结合-m-f 'P */'。这可以防止目录在接收方被删除,并且不会创建不必要的目录来存放发送的文件。