查找文件的所有者

查找文件的所有者

我正在寻找一种在 bash 脚本中返回文件所有者的方法。我猜想使用“gawk”是可能的,但老实说我没有任何线索,而且网上似乎还没有发布一个可以理解的答案。

答案1

用于stat此。

在 GNU 系统中:

  • 要获取所有者的用户名:

    stat -c '%U' file.txt
    
  • 要获取所有者的用户 ID (UID):

    stat -c '%u' file.txt
    

假设文件是file.txt​​ .


适用于 FreeBSD 和 Mac OS X(感谢@cas):

  • 对于用户名:

    stat -f '%Su' file.txt
    
  • 对于 UID:

    stat -f '%u' file.txt
    

答案2

ls -l foo

字段 #3 是所有者,字段 #4 是组。因此:

set -- $(ls -l foo) ; echo $3

统计数据如果可用的话会更好。

答案3

请注意,zshshell 在模块中有自己的stat内置命令(并且早在 GNU 和 BSD 添加它们自己的命令之前就已经有了)zsh/stat

zmodload zsh/stat
stat +uid file

将输出符号链接解析后的所有者 uid file。如果对于符号链接,您希望最终解析为符号链接的所有者而不是文件,请添加该-L选项(也是statalstat()而不是 a stat())。

添加将-s其翻译uid为用户名的选项。如果有多个具有相应 uid 的用户名,则会报告getpwuid().如果该 uid 没有用户名,则该 uid 将保持未翻译状态。

早在 GNU coreutils 添加stat命令之前,GNUfind就有能力通过其-printf谓词来实现这一点:

find file -prune -printf '%U\n'

替换%U%u将 uid 转换为一个匹配的用户名。添加-H选项以跟踪符号链接并获取最终目标的所有者。

POSIXly,你需要依赖ls

LC_ALL=C ls -nd file | LC_ALL=C awk '{print $3; exit}'

替换-n-l将 uid 转换为一个用户名(假设用户名不包含空格或制表符)。添加-L跟随符号链接的选项。

相关内容