Coreutils的stat
有--format=
开关,报告关于易形成文件(所有者,大小等),供读者不同的信息。
POSIX ls
工具提供了大部分此信息,但其输出是很难解析。 用一行代码比较:
[ `stat -c '%U' $f` = $USER ] && echo "You own $f" || echo Error!
有没有stat
在POSIX实用模拟?
Coreutils的stat
有--format=
开关,报告关于易形成文件(所有者,大小等),供读者不同的信息。
POSIX ls
工具提供了大部分此信息,但其输出是很难解析。 用一行代码比较:
[ `stat -c '%U' $f` = $USER ] && echo "You own $f" || echo Error!
有没有stat
在POSIX实用模拟?
简短的回答是否定的 ,POSIX并没有提供一种简单的方式来获得输出相同的stat
。 但是,您可以使用其他工具通常得到相关的位。 为了让车主具体是:
ls -ld /path/of/file/or/directory | awk '{print $3}'
这不可能 :-(
你的选择是:
使用ls
和解析与awk
; 输出ls -l
是POSIX,所以你可以依靠。 这工作好一些领域(如您的示例中的所有者),并为他人(如修改时间),不是那么好。
检测stat
版本和切换参数; GNU统计有-f
,BSD统计-c
,其他版本可能是别的东西。 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='')"
你也可以扩展这个与其他语言(红宝石,PHP,TCL等),但Perl的&Python的是目前最普遍的。
对于文档: Perl的stat()
Perl的lstat()
的Python os.stat()