由于我对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" 我应该用什么语法来消除这个错误?
如果有人能帮我,我会非常感激的。谢谢
发布于 2016-03-18 08:10:30
您正在使用一个非标准的“长选项”。像--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中使用。是的,您可能可以在一行中完成全部任务,但是这样做没有好处,而且很难调试。
https://stackoverflow.com/questions/36078887
复制相似问题