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 的更高版本中可用。是的,您可能可以在一条长线中完成所有操作,但这样做没有任何优势,而且很难调试。
因为我是 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 的更高版本中可用。是的,您可能可以在一条长线中完成所有操作,但这样做没有任何优势,而且很难调试。