首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix stat错误:stat:非法选项

Unix stat错误:stat:非法选项
EN

Stack Overflow用户
提问于 2016-03-18 07:50:31
回答 1查看 1.8K关注 0票数 4

由于我对shell编程非常陌生,所以我完全无法理解这个错误:

代码语言:javascript
复制
stat: illegal option -- -
usage: stat [-FLnq] [-f format | -l | -r | -s | -x] [-t timefmt] [file ...]

在FreeBSD上运行脚本时会发生此错误。它在CentOS上运行得很好。

这是我正在使用的代码

代码语言:javascript
复制
for i in `find "$1" -name "$2" -type f ! -name "$3" -print0 | xargs -0 stat --format="%s" | sort -n| awk {print}`; do 
    size_array[$j]=$i
    ((j=j+1))

基本功能是将所有文件的大小加载到数组中。因此,我将能够使所有文件大小的中位数。因此,这应该以字节显示文件大小。

代码语言:javascript
复制
stat --format="%s" 

我应该用什么语法来消除这个错误?

如果有人能帮我,我会非常感激的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-18 08:10:30

您正在使用一个非标准的“长选项”。像--format这样的选项在GNU实用程序中很常见,但不是标准的。Linux上的许多命令行实用程序都来自GNU。

通常,短期选项-f将跨平台工作。然而,stat(1)也是不标准的!看来,对于CentOS,您需要--format-c

您需要使用类似于uname(1)的东西来测试操作系统版本。不幸的是,当您使用非标准特性时,就会发生这种情况。

编辑:

这里有一个替代方案,它应该在任何地方都能发挥作用,我认为它可以满足你的需要:

代码语言:javascript
复制
declare -A size_array
i=0

for fname in $(find "$1" -name "$2" -type f \! -name "$3" -print)
do
    size_array[$i]=$(ls -l "$fname"|awk '{print $5}')
    (( i++ ))
done

echo ${size_array[@]}

!被转义(\前缀),因为它是bash中的一个特殊字符。而不是使用数组计数($i),然后可以使用+=附加到数组,但这只能在后期版本的bash中使用。是的,您可能可以在一行中完成全部任务,但是这样做没有好处,而且很难调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36078887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档