Bash:计算在文件夹中查找结果

时间:2011-01-24 20:41:10

标签: bash find if-statement

我试图计算可以“找到”脚本的文件数量,如果它不止一个,请提供一种错误消息,如果它的零给出另一个错误消息。

如果我跑

find procesoSitemap-*.jar -exec printf '.' \;| wc -c

它有效,我可以看到搜索结果的编号,但是如何将其实现到脚本中呢?

##!/bin/bash
FINDPS="find procesoSitemap-*.jar -exec printf '.' \;| wc -c"

    if $FINDPS = 1
    then
            echo "There is ONE procesoSitemap jar file"
    else
            echo "There should be only ONE procesoSitemap jar file"
    fi

谢谢!

5 个答案:

答案 0 :(得分:6)

使用反引号;

FINDPS=`find procesoSitemap-*.jar -exec printf '.' \;| wc -c`

还会修复您的if行;

if [ $FINDPS -eq 1 ]
then
        echo "There is ONE procesoSitemap jar file"
else
        echo "There should be only ONE procesoSitemap jar file"
fi

答案 1 :(得分:1)

我相信你的脚本有一些小问题。试试这个:

#!/bin/bash
FINDPS=`find . -name "procesoSitemap-*.jar" | wc -l`

if [[ $FINDPS == 1 ]] ; then
        echo "There is ONE procesoSitemap jar file"
else
        echo "There should be only ONE procesoSitemap jar file"
fi

答案 2 :(得分:1)

您的if声明应如下所示:

if (( FINDPS == 1 ))

在Bash或POSIX sh中:

if [ $FINDPS -eq 1 ]

您的变量分配应为:

FINDPS=$(find procesoSitemap-*.jar -exec printf '.' \; | wc -c)

在Bash或任何POSIX shell中。在旧版Bourne sh中,使用反引号:

FINDPS=`find procesoSitemap-*.jar -exec printf '.' \;| wc -c`

你对Bash的shebang应该是:

#!/bin/bash

你有太多'#'。

答案 3 :(得分:1)

您可以通过避免find ... -exec ... \; | ...

来加快文件计数
- FINDPS="find procesoSitemap-*.jar -exec printf '.' \;| wc -c"
+ FINDPS="$(find . -name "procesoSitemap-*.jar" -print0 | tr -dc '\0' | wc -c)"

答案 4 :(得分:0)

$()``,前者是首选(并且是POSIX),但后者适用于某些较旧的shell。