几年前/几个版本之前,我发现了一个脚本,该脚本利用了当前文件夹的目录组/权限来获取新文件子文件夹
目前,当我使用 Shotwell 将照片导入 12.04 时,我必须使用终端发出:chgrp photography *.JPG。这使“摄影”组的其他 ubuntu 成员能够将这些文件添加到他们的 Shotwell 版本中。
我发现修改文件夹属性/权限不会将组设置为“将权限应用于封闭文件”
答案1
因此,如果我理解正确的话,您希望放入特定文件夹的文件(图片)自动分配到特定组(摄影)。
一个可能的解决方案是设置“setgid 权限“在存储所有图像的父文件夹中。setgid 权限(参见例如维基百科) 确保在设置了 setgid 位的文件夹中创建的所有文件和文件夹都获得该文件夹的组(而不是文件创建者设置的组)。
由于这不会影响已在此目录中创建的文件和文件夹,因此首先使用递归方式更改其组
chgrp photography -R <your shotwell photo folder>
现在在该文件夹上设置 setgid 位。为此,请运行
chmod g+s <your shotwell photo folder>
执行完这两个命令后,你的shotwell照片文件夹以及里面的所有内容都属于“摄影”组,并且setgid也设置好了:
ls -ld <your shotwell photo folder>
drwxrwsr-x 2 <your user> photography 4096 Aug 27 20:42 <your shotwell photo folder>
注意 中的 s drwxrwsr-x
。该“s”表示已设置 setgid 位。
现在,每次将照片复制到您的 shotwell 文件夹时,它们都会自动分配到“摄影”组。
警告:
如果文件和文件夹被移动到该目录中(而不是复制)。它们的组不会改变。这是由于工具本身的原因。“mv”基本上只是重命名文件,保留其原始所有权和权限,而“cp”会在目标目录中创建一个新文件。
答案2
如果您只有一组人,并且每个人对文件都具有相同的权限,那么 ceage 答案中的 setgid 位解决方案将完美地发挥作用 (+1),但如果您需要对多个组、不同的权限甚至每个用户规则进行更多控制,则可以使用 acl。你可以看看man setfacl
。
例如,在您的情况下,您可以为摄影组定义一个 acl:
setfacl -Rm d:g:photography:rwX,g:photography:rwX /photo_dir
-R : recursive to all sub-folders and files
-m: modify using arguments in command line (can be used from config files)
d:g:photography:rwX: apply default (d:) permissions (rwX:) for photography group (g:group) on new files/directories
g:photography:rwX: same as above on existent files/directories (no d:)
rwX: capital X defines x only for directories
您可以使用以下方式检查已应用的权限getfacl /photo_dir
例如,如果您需要第二个具有只读权限的组,则可以定义另一个 acl,并以相同的方式将其应用于新组,而rX
不是rwX
。可以为整个目录或单个文件定义 ACL。
这将是永久性的,当您添加、删除或修改图片时,您无需重新定义权限。您只需定义一次 ACL,然后“忘记”它。
看到的用户和组ls -l
将不再相关/足以控制文件访问(当您第一次运行 setfacl 时它们会在 acl 中转换)并且权限列表末尾会有一个“+”,如drwxrws---+ 6 root....
。