从种子箱rsync后强制对文件施加新权限

GeG*_*edy 7 permissions samba rsync

我有一个用于种子下载的种子箱帐户。我已经设置了一个 cron 作业,用于rsync将所有文件从种子箱下载到我的 14.04.1 ubuntu 服务器。下载文件夹是一个 samba 共享,因为我以前使用 Windows 将内容组织到文件夹中,然后再将其移动到我服务器上更永久的位置。在升级到 14.04 之前,我使用了 12.04,一切正常。

问题是我从种子箱获得的文件归名为“544”的用户所有(这是种子箱生成的用户名,不是一些八进制的东西)并且我的用户在我的服务器上无法删除。更改下载文件夹的权限后,我可以删除它们。此外,我已授予所有用户在共享 samba 文件夹时读取/写入的权限。

所以我的问题是:是否可以通过执行一些优雅的命令rsync在下载文件时更改文件的用户/权限?或者是否可以使文件夹功能使所有新文件在复制/移动到它时都会自动更改用户?我想我可以将chmod命令放在 sudo cron 中每隔一段时间运行一次以更改文件的所有者,但是由于有时要下载的数据量可能相当大,因此很难知道何时触发它与 rsync-job 的关系,以确保下载所有文件。

Mic*_*mer 15

rsync 在您要求时保留所有者-o- 否则文件将由运行该rsync命令的用户拥有,就像创建任何其他文件一样。然而,-a包括-o,因此许多常见的rsync命令行都包含它。man rsync包括一个明确的段落:

For example: if you want to use -a (--archive) but don’t want -o
(--owner),  instead  of  converting  -a  into -rlptgD, you could
specify -a --no-o (or -a --no-owner).
Run Code Online (Sandbox Code Playgroud)

因此,rsync -a source dest您可以使用rsync -a --no-o source dest让运行命令的用户拥有文件来代替您。

另一方面,如果您是 root,您通常只能更改文件的所有者,所以这不会出现太多。如果出于某种原因需要以 root 身份运行此作业,并且您希望文件归普通用户而不是 root 拥有,则可以使用以下--chown选项:

rsync -a --chown=youruser:yourgroup ...
Run Code Online (Sandbox Code Playgroud)

--usermap如果您确实想保留一些用户,还可以选择更复杂的映射。它需要一个逗号分隔的from:to对列表。

作为最后一个选择,由于您显然是rsync从 cron 作业运行,您只需将所有者/权限更改操作附加到 cron 作业&& chown ...