POSIX的coreutils模拟指令“STAT”?(POSIX analog of coreuti

2019-10-21 13:38发布

Coreutils的stat--format=开关,报告关于易形成文件(所有者,大小等),供读者不同的信息。

POSIX ls工具提供了大部分此信息,但其输出是很难解析。 用一行代码比较:

[ `stat -c '%U' $f` = $USER ] && echo "You own $f" || echo Error!

有没有stat在POSIX实用模拟?

Answer 1:

简短的回答是否定的 ,POSIX并没有提供一种简单的方式来获得输出相同的stat 。 但是,您可以使用其他工具通常得到相关的位。 为了让车主具体是:

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


Answer 2:

这不可能 :-(

你的选择是:

  • 使用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()



文章来源: POSIX analog of coreutils “stat” command?