如何检查文件夹中是否存在多个文件(将类型扩展名作为参数)——使用bash

如何检查文件夹中是否存在多个文件(将类型扩展名作为参数)——使用bash,bash,file,if-statement,Bash,File,If Statement,情景: 我在文件夹中有一组.txt文件,脚本正在检查*.txt文件是否存在 脚本: set -x if [ -f *.txt ] then echo exist else echo not fi 输出: + '[' -f 1.txt 2.txt ']' test.sh: line 2: [: 1.txt: binary operator expected + echo not not -f一元主值只取一个操作数。您需要将[-f*.txt]替换为: ( set

情景: 我在文件夹中有一组.txt文件,脚本正在检查*.txt文件是否存在

脚本:

set -x
if [ -f  *.txt ]
then
        echo exist
else
        echo not
fi
输出:

+ '[' -f 1.txt 2.txt ']'
test.sh: line 2: [: 1.txt: binary operator expected
+ echo not
not

-f
一元主值只取一个操作数。您需要将
[-f*.txt]
替换为:

( set +f -- *.txt; test "$*" != '*.txt' || test -f '*.txt' )
这并不是对每个匹配的文件都执行类型检查,但我认为它可以满足您的情况

  • 要设置的
    +f
    用于确保未禁用路径名扩展
  • --
    用于标记选项的结束
  • *.txt
    扩展到与
    *.txt
    匹配的文件,并将其与
    集合一起使用,我们将用它们填充
    $*
  • 如果没有匹配的文件
    *.txt
    ;它不会扩展到任何东西,它会保持不变;使用
    测试“$*”!=”*。txt'
    我们正在检查情况是否如此
  • 有一种边缘情况,其中唯一匹配
    *.txt
    的文件是名为
    *.txt
    的文件<代码>测试-f'*.txt'
    用于覆盖该情况

正如@Inian所建议的,使用Bash扩展
nullglob
我们可以省略最后一个检查。比如:

( shopt -s nullglob; set +f -- *.txt; test "$*" != '' )

然而,我认为这项任务最可取的方法是使用
find…|读取
作为条件:

find . ! -name . -prune -name '*.txt' -type f | read

-f
一元主值只取一个操作数。您需要将
[-f*.txt]
替换为:

( set +f -- *.txt; test "$*" != '*.txt' || test -f '*.txt' )
这并不是对每个匹配的文件都执行类型检查,但我认为它可以满足您的情况

  • 要设置的
    +f
    用于确保未禁用路径名扩展
  • --
    用于标记选项的结束
  • *.txt
    扩展到与
    *.txt
    匹配的文件,并将其与
    集合一起使用,我们将用它们填充
    $*
  • 如果没有匹配的文件
    *.txt
    ;它不会扩展到任何东西,它会保持不变;使用
    测试“$*”!=”*。txt'
    我们正在检查情况是否如此
  • 有一种边缘情况,其中唯一匹配
    *.txt
    的文件是名为
    *.txt
    的文件<代码>测试-f'*.txt'
    用于覆盖该情况

正如@Inian所建议的,使用Bash扩展
nullglob
我们可以省略最后一个检查。比如:

( shopt -s nullglob; set +f -- *.txt; test "$*" != '' )

然而,我认为这项任务最可取的方法是使用
find…|读取
作为条件:

find . ! -name . -prune -name '*.txt' -type f | read

Yo man,你是一切的珍宝:)谢谢你分享这个好的解决方案。请你做一些解释,这样像我这样的人可以从中学到更多,虽然我能理解,但如果你能提供一些信息,那就太好了,干杯。@RavinderSingh13添加了一个简短的解释,希望它能帮上忙。伙计,你是一切的珍宝:)谢谢分享这个好的解决方案。请你添加一些解释,以便像我这样的人可以从中了解更多,尽管我能理解,但如果你能提供一些信息,那就太好了,干杯。@RavinderSingh13添加了一个简短的解释,希望能有所帮助