通过文件名(不带扩展名)检查文件是否存在

3

这个很好运作

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

但是,如果我知道可能有一个名为“img”的图像文件,但我不知道文件是 .jpg、.gif、.jpeg、.tff 等格式,怎么办呢?

我并不关心文件扩展名,只想知道是否存在名为“img”的文件。

我该如何做呢?

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的数组中。 然后检查数组大小以确定所需的文件是否存在。
有关如何获取数组长度,请参见此处

你能解释一下你在那里使用的bash语法吗? - Nelson
1
如果没有img.*文件怎么办? - codaddict
@codaddict 感谢您的评论,我更新了我的答案以检查空情况 :)。 - Summer_More_More_Tea

2

您可以执行以下操作:

files=$(ls img.* 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
echo "exist"
else
echo "doesn't exist"
fi

0

0

不使用任何外部命令:

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

检查是否存在任何文件。如果存在,则打印“存在”,否则打印“不存在”,并立即退出循环。需要进行“-f”检查,因为如果没有文件存在,循环仍会运行一次,i 为“img.*”本身。

0
shopt -s nullglob
files=( img.* )
if (( ${#files[@]} == 0 )); then
    echo "there are no 'img' files"
fi

如果您不使用nullglob,那么如果没有这样的文件,数组将有1个元素,即字面字符串"img.*"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接