Unix 统计错误 "stat: illegal option -- -"

Unix stat error "stat: illegal option -- -"

因为我是 shell 编程的新手,所以我完全迷失了这个错误,我得到:

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

当我在 FreeBSD 上 运行 脚本时出现此错误。它在 CentOS 上工作得很好。

这是我正在使用的代码

for i in `find "" -name "" -type f ! -name "" -print0 | xargs -0 stat --format="%s" | sort -n| awk {print}`; do 
    size_array[$j]=$i
    ((j=j+1))

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

stat --format="%s" 

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

如果有人能帮助我,我将不胜感激。谢谢

您使用的是非标准"long option"。 --format 之类的选项在 GNU 实用程序中很常见,但不是标准选项。 Linux 上的许多命令行实用程序都来自 GNU。

通常短选项 -f 可以跨平台使用。然而 stat(1) 也是非标准的!对于 CentOS,您似乎需要 --format-c.

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

编辑:

这是一个适用于任何地方的替代方案,我认为它可以满足您的需要:

declare -A size_array
i=0

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

echo ${size_array[@]}

! 被转义(\ 前缀),因为它是 bash 中的特殊字符。与其使用数组计数 ($i),不如使用 += 附加到数组,但这仅在 bash 的更高版本中可用。是的,您可能可以在一条长线中完成所有操作,但这样做没有任何优势,而且很难调试。