【问题标题】:how to check if a particular user is a owner of certain directories and if not then assign this user as a owner using bash script如何检查特定用户是否是某些目录的所有者,如果不是,则使用 bash 脚本将此用户分配为所有者
【发布时间】:2013-07-08 08:24:58
【问题描述】:

我是 linux 新手,目前必须执行一项任务,我必须检查特定用户是否是目录及其子目录的所有者,如果不是,则将他分配为所有者。我需要在 bash 脚本中执行此操作,因此任何人都可以为我提供示例,这将非常棒。

场景: path = "/opt/dev/myapp"

这个目录包含更多的子目录和文件

需要检查用户“devuser”是否是所有者,如果不是,则将他分配为所有者。

提前致谢!

【问题讨论】:

    标签: macos bash


    【解决方案1】:

    您可以将用户分配到该目录,无论在检查之前是否存在:

    chown -R bob bobs-directory
    

    其中-R 表示递归向下遍历目录树,bob 是用户名,bobs-directory 是您要授予所有权的根目录。

    【讨论】:

      【解决方案2】:

      正如Alberto Zaccagni 正确所说,您可以立即更改所有者。如果你还是想检查,你可以这样做:

      dir="/opt/dev/myapp"
      username=devuser
      
      [ "$(stat -c "%U" "$dir")" == "$username" ] || chown -R $username "$dir"
      

      stat 是一个实用程序,用于显示有关文件的信息(所有者、权限、时间……)。

      请注意,在分配变量时,您不能在 = 周围放置空格。另外,我建议不要使用像 path 这样的变量名,因为这很容易与环境变量 $PATH 混淆。

      编辑: Mac OS X 附带 BSD stat,它有不同的选项,因此您必须像这样更改命令:

      [ "$(stat -f "%Su" "$dir")" == "$username" ] || chown -R $username "$dir"
      

      【讨论】:

      • 感谢您的回复!我刚刚检查了运行它并且它可以工作,但我仍然在控制台中收到以下消息: stat: 非法选项 -- c 用法:stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...] [: : 预期的整数表达式 你能解释一下这个命令吗?
      • 所以你运行的是 OSX,而​​不是 Linux。你应该相应地标记你的问题。查看更新的答案。
      • 请避免发布“谢谢”cmets。对 SO 表示感谢的正确方法是投票和/或 accept 回答。
      猜你喜欢
      • 2018-10-30
      • 2013-01-22
      • 2016-08-24
      • 2020-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多