这工作得很好
if [[ -e img.png ]]
then
echo "exist"
else
echo "doesn't exist"
fi
但是,如果我知道可能存在名为 img 的图像,但我不知道文件是 .jpg 、 .gif 、 .jpeg 、 .tff 等,该怎么办。
我不在乎扩展名是什么我只想知道是否有一个名为“img”的文件
我怎样才能做到这一点 ?
您可以使用以下脚本
files=`ls img.* 2>/dev/null`
if [ "$files" -a ${#files[@]} ]; then
echo "exist"
else
echo "doesn't exist"
fi
在此代码段中,您用于ls img.*
列出当前工作目录中名称与模式匹配的所有文件img.*
。结果存储在名为 的数组files
中。然后检查数组的大小以确定是否存在所需的文件。
请参阅this了解如何获取数组的长度。
你可以做:
files=$(ls img.* 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
echo "exist"
else
echo "doesn't exist"
fi
像这样的东西应该可以完成这项工作:
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
没有任何外部命令:
$ for i in img.*
> do
> [ -f $i ] && echo exist || echo not exist
> break
> done
检查是否存在任何文件。如果存在 print 存在,否则不存在,并立即中断。需要“-f”检查,因为如果不存在文件,循环仍然会运行一次,i 作为“img.*”本身。
shopt -s nullglob
files=( img.* )
if (( ${#files[@]} == 0 )); then
echo "there are no 'img' files"
fi
如果不使用nullglob
then,如果没有这样的文件,则数组将有 1 个元素,即文字字符串“img.*”。