查找目录或文件的所有者,但只返回该所有者而不返回其他内容

查找目录或文件的所有者,但只返回该所有者而不返回其他内容

我正在寻找一个将返回目录所有者的命令,并且仅此 - 例如解析ls -lat命令的正则表达式或类似的东西?我想在另一个脚本中使用结果。

答案1

statGNU 核心工具可以这样做:

stat -c '%U' /path/of/file/or/directory

不幸的是,有许多版本stat,并且它们的语法没有太多一致性。例如,在 FreeBSD 上,它将是

stat -f '%Su' /path/of/file/or/directory

如果考虑可移植性,您可能最好使用吉尔斯的建议的组合lsawk.它必须启动两个进程而不是一个,但它的优点是仅使用 POSIX 标准功能:

ls -ld /path/of/file/or/directory | awk '{print $3}'

答案2

解析 的输出ls很少是一个好主意,但获取前几个字段是一个例外,它实际上适用于所有“传统”unices(它不适用于某些平台,例如允许用户名中包含空格的 Windows 实现)。

ls -ld /path/to/directory | awk 'NR==1 {print $3}'

另一种选择是使用命令,但shell 的stat问题是有多个具有不同语法的命令,因此在 shell 脚本中是不可移植的(即使跨 Linux 安装也是如此)。statstat

请注意,测试给定用户是否是所有者是一个不同的命题。

if [ -n "$(find . -user "$username" -print -prune -o -prune)" ]; then
  echo "The current directory is owned by $username."
fi
if [ -n "$(find . -user "$(id -u)" -print -prune -o -prune)" ]; then
  echo "The current directory is owned by the current user."
fi

答案3

也可以使用 GNU 来做到这一点find

find "$directoryname" -maxdepth 0 -printf '%u\n'

这在 GNU 系统之外是不可移植的,但我很惊讶地发现它在 Linux 发行版中不起作用。

答案4

ls -ld /path/to/file/or/directory | cut -d' ' -f3

相关内容