从种子箱进行 rsync 后强制对文件授予新权限

从种子箱进行 rsync 后强制对文件授予新权限

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

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

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

答案1

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).

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

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

rsync -a --chown=youruser:yourgroup ...

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

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

答案2

我测试了一些方法,但就我而言,例如这个脚本的结果

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usb_ext4

是权限不能比应写入文件的分区/目标的权限更宽。 (安装设备后检查这些权限)

相关内容