3

这工作得很好

if [[ -e img.png ]]
then
     echo "exist"
else
     echo "doesn't exist"
fi

但是,如果我知道可能存在名为 img 的图像,但我不知道文件是 .jpg 、 .gif 、 .jpeg 、 .tff 等,该怎么办。

我不在乎扩展名是什么我只想知道是否有一个名为“img”的文件

我怎样才能做到这一点 ?

4

5 回答 5

2

您可以使用以下脚本

files=`ls img.* 2>/dev/null`
if [ "$files" -a ${#files[@]} ]; then
    echo "exist"
else
    echo "doesn't exist"
fi

在此代码段中,您用于ls img.*列出当前工作目录中名称与模式匹配的所有文件img.*。结果存储在名为 的数组files中。然后检查数组的大小以确定是否存在所需的文件。

请参阅this了解如何获取数组的长度。

于 2012-11-06T08:28:27.740 回答
2

你可以做:

files=$(ls img.* 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
echo "exist"
else
echo "doesn't exist"
fi
于 2012-11-06T08:28:48.180 回答
0

像这样的东西应该可以完成这项工作:

if [[ $(ls img.*) ]]; then
  echo "file exist";
else
  echo "file does not exist";
fi

我建议看看 bash 的模式匹配: http ://tldp.org/LDP/Bash-Beginners-Guide/html/sect_04_03.html

于 2012-11-06T08:45:24.690 回答
0

没有任何外部命令:

$ for i in img.*
> do
>  [ -f $i ] && echo exist || echo not exist
>  break
> done

检查是否存在任何文件。如果存在 print 存在,否则不存在,并立即中断。需要“-f”检查,因为如果不存在文件,循环仍然会运行一次,i 作为“img.*”本身。

于 2012-11-06T09:01:54.517 回答
0
shopt -s nullglob
files=( img.* )
if (( ${#files[@]} == 0 )); then
    echo "there are no 'img' files"
fi

如果不使用nullglobthen,如果没有这样的文件,则数组将有 1 个元素,即文字字符串“img.*”。

于 2012-11-06T11:26:55.843 回答