为什么在没有空文件夹的情况下总是找到返回的空文件夹?

时间:2018-09-30 17:16:44

标签: shell sh

我有这个脚本,它总是返回回显“找到空文件夹”。

如果我运行命令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

2 个答案:

答案 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 ]