因此,我正在研究一个简单的目录大小函数,该函数假定接受目录的输入并告诉您其大小,以及该大小是大于还是小于1 kb。我以前收到过帮助,但是,在修改我的代码后,我收到一条错误消息,提示未找到命令。这是没有意义的,因为命令语法非常好。
#!/bin/bash
# GNU bash, version 4.3.46
function checkSize(){
#while the directory exists and size is greater than 1
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -gt "$minimumsize"
do
echo "$varDirectory is greater then 1kb"
done
#while the directory size is less than 1
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -lt "$minimumsize"
do
echo "$varDirectory is less than 1kb"
exit
done
}
输入目录后出现以下错误
./testing.sh: line 19: 299M: command not found
./testing.sh: line 24: 299M: command not found
此错误是针对以下几行
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -gt "$minimumsize"
while [ -d "$varDirectory" ] && $(du -sh $varDirectory) -lt "$minimumsize"
语法正确,但是会引发该错误。
答案 0 :(得分:3)
语法正确,但是会引发该错误。
否,语法不正确。使用$(du -sh $varDirectory) -gt "$minimumsize"
,您正在运行命令du -sh $varDirectory
,然后获取其输出,并再次将输出作为命令运行。在您的情况下,输出以299M
开始,因此bash抱怨找不到299M
命令。
您可能想写
if [ -d "$varDirectory" ] &&
[ $(du -s "$varDirectory" | cut -f1) -gt "$minimumsize" ]
then
echo "greater than $minimumsize"
else
echo "less than or equal $minimumsize or not a directory"
fi
请注意,您只能比较数字。但是,du -sh
的输出不是数字,而是类似299m directory
的输出。禁用人类可读的格式以删除k
,m
,g
,...后缀,然后使用cut -f1
仅提取数字。
您也不需要循环。 while
重复。 if
仅运行一次。借助if
,您还可以使用else
分支。
答案 1 :(得分:0)
尝试
while [ -d "$varDirectory" ] && [ $(du -s $varDirectory|cut -f 1) -gt "$minimumsize" ]
我建议省略-h
的{{1}}(=“人类可读”)选项,因为类似du
这样的字符串很难比较。