Unix stat error“stat:illegal option - - ”

时间:2016-03-18 07:50:31

标签: bash unix freebsd xargs

因为我对shell编程很新,所以我完全迷失了这个错误:

stat: illegal option -- -
usage: stat [-FLnq] [-f format | -l | -r | -s | -x] [-t timefmt] [file ...]

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

这是我正在使用的代码

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))

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

stat --format="%s" 

我可以使用什么语法来摆脱这个错误?

如果有人能帮助我,我将非常感激。感谢

1 个答案:

答案 0 :(得分:0)

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

通常短选项-f可以跨平台工作。但是stat(1)也是非标准的!看来,对于CentOS,您需要--format-c

您需要使用uname(1)之类的内容测试操作系统版本。不幸的是,当您使用非标准功能时会发生这种情况。

编辑:

这是一个应该适用于所有地方的替代方案,我认为可以满足您的需求:

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中可用。是的,您可以在一个长行中完成所有操作,但没有优势,这使得调试变得困难。