Coreutilsstat
有--format=
开关,它以简单的形式向读者报告有关文件的不同信息(所有者、大小等)。
POSIXls
实用程序提供了大部分此类信息,但其输出难以解析。与单线比较:
[ `stat -c '%U' $f` = $USER ] && echo "You own $f" || echo Error!
POSIX 中是否有stat
实用程序模拟?
Coreutilsstat
有--format=
开关,它以简单的形式向读者报告有关文件的不同信息(所有者、大小等)。
POSIXls
实用程序提供了大部分此类信息,但其输出难以解析。与单线比较:
[ `stat -c '%U' $f` = $USER ] && echo "You own $f" || echo Error!
POSIX 中是否有stat
实用程序模拟?
这不可能 :-(
您的选择是:
使用ls
和解析它awk
; 的输出ls -l
在 POSIX 中,所以你可以依赖它。这适用于某些字段(例如您示例中的所有者),但不适用于其他字段(例如 mtime)。
检测stat
版本和切换参数;GNU stat has -c
,BSD stat has
-f
,其他版本也许是别的。stat
根本不在 POSIX 中,不过我不知道它在 Linux、BSD 和 OSX 之外有多广泛。
使用 Perl 或 Python 单线;当然,这甚至不是远程 POSIX,但是假设至少存在其中一种语言在 2015 年是一个相当合理的假设,如果它们确实存在,在启动时很容易检测到。如果性能是任何问题,它也不是一个选择。
例如,我在所有这些示例中都使用了 mtime,因为这很难使用ls
:
#!/bin/sh
file="/etc/passwd"
perl -e "print((stat(\"$file\"))[9])"
echo
echo "$file" | perl -e '$i = <STDIN>; chomp($i); print((stat($i))[9])'
echo
python -c "import os; print(os.stat(\"$file\").st_mtime, end='')"
echo
echo "$file" | python -c "import os, sys; print(os.stat(sys.stdin.readline()[:-1]).st_mtime, end='')"
echo
我会推荐 Perl 版本;不是因为我喜欢 Perl,而是因为这个 Python 示例仅适用于 Python 3(特别end=''
是防止打印换行符的位。适用于 Python 2 和 3 的版本相当长:
python2 -c "from __future__ import print_function; import os; print(os.stat('/etc/passwd') .st_mtime, end='')"
您也可以使用其他语言(Ruby、PHP、Tcl 等)扩展它,但 Perl 和 Python 是迄今为止最普遍的。
简短的回答是否定的,POSIX 没有提供一种简单的方法来获得与stat
. 但是,您通常可以使用其他工具获得相关位。要具体获取所有者:
ls -ld /path/of/file/or/directory | awk '{print $3}'