![如何根据文件部分名称检查文件是否存在](https://linux22.com/image/125785/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E9%83%A8%E5%88%86%E5%90%8D%E7%A7%B0%E6%A3%80%E6%9F%A5%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8.png)
众所周知,检查文件的方法是这样的
[[ -f /var/scripts_home/orig_create_DB_files_1.46.38 ]] && echo file exist
但如果文件包含名称为 - ”,如何检查文件是否存在创建数据库文件”
我尝试这个(但不起作用)
[[ -f /var/scripts_home/*create_DB_files* ]] && echo file exist
或者
partial_file_name=create_DB_files
[[ -f /var/scripts_home/*$partial_file_name* ]] && echo file exist
答案1
for name in *create_DB_files*; do
if [ -f "$name" ]; then
printf 'at least one file exists (%s)\n' "$name"
break
fi
done
即匹配相关名称并检查其中是否有一个是常规文件(一找到就退出循环)。
答案2
这将根据部分名称测试文件是否存在,并具有查找文件的所有灵活性,允许find
:
find . -name '*create_DB_files*' -printf 1 -quit | grep -q 1
人们可能需要考虑添加-type f
限制匹配到常规文件,或者-mtime
如果想要匹配文件日期,或者-maxdepth 1
将搜索限制到当前目录等。
上述内容可以合并到if
命令中,如下所示:
if find . -name '*create_DB_files*' -printf 1 -quit | grep -q 1
then
echo found
else
echo Not found
fi