rsync错误:无法在"/ foo/bar"上设置时间:不允许操作

dre*_*ves 178 rsync file-transfer

我从rsync中得到一个令人困惑的错误,我从网络搜索中找到的最初的东西(以及所有通常的chmod'ing)都没有解决它:

rsync: failed to set times on "/foo/bar": Operation not permitted (1)
rsync error: some files could not be transferred (code 23) 
  at /SourceCache/rsync/rsync-35.2/rsync/main.c(992) [sender=2.6.9]
Run Code Online (Sandbox Code Playgroud)

尽管有这样的错误,它似乎仍在工作,但摆脱它会很好.

Jon*_*ght 269

如果/foo/bar是在NFS(或可能是某些FUSE文件系统)上,那可能就是问题所在.

无论哪种方式,添加-O/ --omit-dir-times到您的命令行将避免它尝试在目录上设置修改时间.

  • @dlink 您可以添加 `--no-t` 来删除隐含选项。 (10认同)
  • 我使用rsync -avc,添加-O没有帮助.然后我读到-a与-rlptgoD相当,其中包括-t,我猜这是-O.所以对我来说,解决方法是使用-rlpgoDvc (9认同)
  • 有趣的是我将ext3同步到ext3这两个操作系统都是linux.我以前从未使用过此开关.-O做了这个伎俩,但我希望我不必使用它. (6认同)
  • 谢谢!事实证明,一些VPS主机(例如xlshosting.nl)在内部使用它,这可能会给rsync带来问题. (3认同)
  • 我从Linux ext4到Linux ext4的同样问题:对于*symlinks*而言,"无法设置时间:操作不允许",而不是目录.显然,`-O`没有用.当我的备份分区是ext3而不是ext4时,这不常发生. (2认同)
  • @dlink:`-t`用于`保留修改时间`,`-O`用于“省略`-t`中的目录”。如果您不使用“-t”,您也可以删除“-O”。 (2认同)

and*_*dam 82

问题可能是由于/ foo/bar不属于远程darwin(OS X)系统上的写入过程. 该问题的解决方案是在远程站点上设置足够的所有者.

由于这个答案已经被投票,因此对某人有用,我正在扩展它以使其更清楚.

发生这种情况的原因是rsync可能在复制文件时尝试设置任意修改时间(mtime).

为了做到这一点,darwin的系统utime()函数要求写入过程有效uid与文件uid或超级用户的相同,请参阅opengroup utime的页面.在rsync邮件列表上查看此讨论作为参考.

  • 在Linux上也是一样的(在我的例子中是Debian Squeeze)...如果我不是目标目录的所有者,rsync会给出"设置次数失败"错误消息.(对目录具有写权限是不够的.) (8认同)
  • 当我尝试使用rsync命令将尝试影响的目录(在远程服务器上)的所有者更改为与尝试通过本地Bash脚本上的rsync登录的用户相同的用户时,此错误消失了.换句话说:我试图使用以下命令写入远程服务器上的`/ remote/path/to/foo/bar`:`rsync -avzP --exclude'.DS_Store'/ local/path/to/foo/bar/user1@1.2.3.4:/ remote/path/to/foo/bar`并得到了相同的错误消息,当我将`user1`作为`/ remoe/path/to/foo/bar`的所有者时,它就消失了这个:`$ chown -R user1/remote/path/to/foo/bar` (2认同)
  • 如果您与组中的其他用户共享您的文件,例如您使用粘性位,那么更改所有者并不是真正的解决方案。我们不使用 -t 并添加 -O 来防止出现此警告。 (2认同)

小智 8

正如@racl101 评论了一个答案,这个问题可能与文件夹所有者有关。rsync 命令应该由与文件夹所有者的用户相同的用户完成。如果不一样,你可以改变它。

chown -R userCorrect /remote/path/to/foo/bar
Run Code Online (Sandbox Code Playgroud)


shi*_*oid 6

我有同样的问题。对我来说,解决方案是删除远程文件并rsync再次创建。