我有这个脚本,它总是返回回显“找到空文件夹”。
如果我运行命令find $RootFolder -mindepth 1 -maxdepth 1 -type d -empty | wc -l | xargs
,它将返回0,因为那里没有空文件夹。
但是,该函数总是像返回一个空文件夹一样返回,并返回echo“ Empty folder found”。
有什么主意吗?
谢谢
RootFolder="/data/output/folder" #Must change to your default output folder. Originally, it's "/data/outpu$
FindEmptyFolders=$(find $RootFolder -mindepth 1 -maxdepth 1 -type d -empty | wc -l | xargs)
if [ "$FindEmptyFolders" > 0 ];
then
echo "Empty folder found."
else
echo "No empty folders found."
fi
答案 0 :(得分:3)
>
无效的[
测试参数。您需要使用-gt
(来自Greather Than)。来自man test:
INTEGER1 -gt INTEGER2
INTEGER1大于INTEGER2
我不知道最后的| xargs
应该做什么。还引用您的变量。
RootFolder="/data/output/folder"
FindEmptyFolders=$(find "$RootFolder" -mindepth 1 -maxdepth 1 -type d -empty | wc -l)
if [ "$FindEmptyFolders" -gt 0 ];
then
echo "Empty folder found."
else
echo "No empty folders found."
fi
或者您可以通过将>
复合命令与shell算术一起使用,像在C语言中一样使用((
,请参见here:
if (( FindEmptyFolders > 0 )); then
echo "Empty folder found."
else
echo "No empty folders found."
fi
答案 1 :(得分:2)
在外壳程序> 0
中的意思是“创建一个名为0
的文件(如果已有的话,则对其进行破坏),然后将标准输出重定向到该文件”。
例如,
echo hello > 0
将hello
写入名为0
的文件。
这样的输出重定向可以出现在命令行的任何地方:
echo > 0 hello
> 0 echo hello
所有人都做同样的事情。
类似地,
[ "$FindEmptyFolders" > 0 ]
等同于
[ "$FindEmptyFolders" ] > 0
表示“测试$FindEmptyFolders
是否为非空字符串并将输出写入名为0
的文件”。
[
命令不产生任何输出,因此实际上总是产生一个名为0
的空文件。该条件始终为true,因为任何数字(甚至是0
)都是非空字符串。
要执行数字“大于”测试,您需要编写
[ "$FindEmptyFolders" -gt 0 ]