因为我对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"
我可以使用什么语法来摆脱这个错误?
如果有人能帮助我,我将非常感激。感谢
答案 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中可用。是的,您可以在一个长行中完成所有操作,但没有优势,这使得调试变得困难。