将一个文件夹的权限克隆到另一个文件夹

发布于 2024-08-02 12:43:28 字数 165 浏览 3 评论 0原文

OS X 中是否有任何方法可以将一个文件夹的权限克隆到另一个文件夹。需要明确的是,我不想复制整个文件夹,只想复制权限,然后将它们设置在另一个文件夹上。我认为这种类型的事情可以在 Linux/UNIX 上使用 setfacl/getfacl 命令来实现,但我不确定如何在 OS X 上做到这一点。

谢谢

Are there any ways in OS X to clone the permissions of one folder to another. Just to be clear, I don't want to copy the entire folder, just the permissions and then set them on another folder. I think this type of thing could be achieved on Linux/UNIX using the setfacl/getfacl commands, but I'm unsure on how to do this with OS X.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

枫林﹌晚霞¤ 2024-08-09 12:43:34

在 Mac OS X v10.5.7 上的 bash 中测试:

chown $(stat -f%u:%g "$srcdir") "$dstdir" # Copy owner and group
chmod $(stat -f%Mp%Lp "$srcdir") "$dstdir" # Copy the mode bits
(ls -lde "$srcdir"  | tail +2 | sed 's/^ [0-9]*: //'; echo) | chmod -E  "$dstdir" # Copy the ACL

注意:这些操作(尤其是更改所有权)可能需要 root 访问权限;撒上 sudo 以获得最佳效果。另外,最后一行的奇怪 echo 命令是为了防止 srcdir 没有附加任何 ACL 条目时出现错误(chmod -E 可以处理空行,但不是完全空的输入)。

Tested on Mac OS X v10.5.7, in bash:

chown $(stat -f%u:%g "$srcdir") "$dstdir" # Copy owner and group
chmod $(stat -f%Mp%Lp "$srcdir") "$dstdir" # Copy the mode bits
(ls -lde "$srcdir"  | tail +2 | sed 's/^ [0-9]*: //'; echo) | chmod -E  "$dstdir" # Copy the ACL

Notes: These operations (esp. changing ownership) are likely to require root access; sprinkle with sudo for best results. Also, that odd echo command on the last line is there to prevent an error if srcdir doesn't have any ACL entries attached (chmod -E can cope with blank lines, but not a completely empty input).

明月松间行 2024-08-09 12:43:34

我想你在谷歌上搜索并至少找到了:

还有这个 网页似乎也涵盖了一些重要信息(例如fsaclctl)。

I presume you Googled and found at least:

And this web page also seems to cover some important information (such as fsaclctl).

同尘 2024-08-09 12:43:34

我找到了一个简单的解决方案。

  1. 在 srcdir 创建一个零字节 test.txt 文件,例如 /User/test1/srcdir/test.txt
  2. 确保 dstdir 不会在目标文件夹中退出,例如 /Users/test2/
  3. 打开终端并输入以下命令
sudo ditto /Users/test1/srcdir/test.txt /Users/test2/dstdir/

注意:dstdir/ 处的最后一个斜杠是必需的

,同上将创建具有与 dstdir/ 相同权限的目录 dstdir/代码>srcdir/

洛克

I found a simple solution.

  1. Create a zero byte test.txt file at srcdir, eg /User/test1/srcdir/test.txt
  2. Make sure dstdir does not exit at target folder, eg /Users/test2/
  3. Open Terminal and type following command
sudo ditto /Users/test1/srcdir/test.txt /Users/test2/dstdir/

Note: the last slash at dstdir/ is necessary

ditto will create directory dstdir/ with same permissions as srcdir/

lok

篱下浅笙歌 2024-08-09 12:43:34

我最终做的是创建一个 Objective C 方法(无论如何我都计划在 Cocoa 应用程序中使用它),该方法使用 perl 脚本查找文件的权限,然后使用 chmod/chown 来应用这些权限。

What I ended up doing was creating an Objective C method (I was planning on using this in a Cocoa app anyways) that finds out the permissions of a file using a perl script, then uses chmod/chown to apply those permissions.

奈何桥上唱咆哮 2024-08-09 12:43:34

这个答案是对 Gordon Davisson 的答案的补充 针对继承属性。

:Mac OS X 11.12.1、bash 3.2.57

测试环境 例如 chmod -E 不支持 inherited 选项。我找到了一个解决方法。

  1. 重要的是要了解允许 \ 拒绝条目可以是本地(默认)和继承
  2. 标志-a添加本地条目,-ai添加继承条目。
chown $(stat -f%u:%g "$srcdir") "$dstdir" # Copy owner and group
chmod $(stat -f%Mp%Lp "$srcdir") "$dstdir" # Copy the mode bits

chmod -N  "$dstdir" # Removes all ACL entries. It can be important because '+a' adds entries, not replaces
chmod +ai "$(ls -lde "$srcdir"  | tail +2 | sed -e 's/^ [0-9]*: //' -e 's/ inherited / /'; echo)" "$dstdir" # Adding inherited entries

This answer is an addition to Gordon Davisson's answer for inherited attributes.

Tested on: Mac OS X 11.12.1, bash 3.2.57

It looks like chmod -E doesn't support the inherited option. I found a workaround.

  1. It is important to understand that allow \ deny entries can be local (default) and inherited.
  2. flag -a adds local entries, -ai adds inherited entries.
chown $(stat -f%u:%g "$srcdir") "$dstdir" # Copy owner and group
chmod $(stat -f%Mp%Lp "$srcdir") "$dstdir" # Copy the mode bits

chmod -N  "$dstdir" # Removes all ACL entries. It can be important because '+a' adds entries, not replaces
chmod +ai "$(ls -lde "$srcdir"  | tail +2 | sed -e 's/^ [0-9]*: //' -e 's/ inherited / /'; echo)" "$dstdir" # Adding inherited entries
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文