通过扩展bash检查文件类型是否存在

时间:2011-01-05 15:19:27

标签: bash

我需要测试目录中是否存在各种文件类型。

我试过

$ [-f *。$ fileext]

其中fileext是文件扩展名,但似乎不起作用。

这两种方法都有效

function checkext() {
fileext=$1

ls *.$fileext>/dev/null 2>&1

if [ $? -eq 0 ]
then
  echo "We have $fileext files!"
else
  echo "We don't have any $fileext files!"
fi
}

function checkext2() {
extention=$1

filescheck=(`ls *.$1`)
len=${#filescheck[*]}


if [ $len -gt 0 ]
then
 echo "We have $extention files!"
else
 if [ $len -eq 0 ]
 then
   echo "We don't have any $extention files!"
 else
   echo "Error"
 fi
fi
}

第二种方法不太整洁,因为显示任何ls错误所以我更喜欢方法1。

人们可以建议任何改进,更优雅的解决方案e.t.c

2 个答案:

答案 0 :(得分:3)

怎么样

shopt -s nullglob
[ -z "`echo *.$ext`" ] || echo "YAY WE HAVE FILES"

编辑:感谢@Dennis指出nullglob

答案 1 :(得分:0)

#!/bin/bash

filetypes="lyx eps pdf"

for type in $filetypes
do
        files=$(ls *.${type} 2>/dev/null)
        if [ ! -z "$files" ]
        then
                echo "filetype: [$type] exists"
        fi  
done