检查shell脚本中是否存在带通配符的文件我正在尝试检查文件是否存在,但是使用通配符。这是我的例子:if [ -f "xorg-x11-fonts*" ]; then
printf "BLAH"fi我也尝试过没有双引号。
3 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
如果您的shell具有nullglob选项并且已打开,则将完全从命令行中删除不匹配任何文件的通配符模式。这将使ls看不到路径名参数,列出当前目录的内容并成功,这是错误的。GNU stat,如果没有参数或命名不存在的文件的参数,总是会失败,会更强大。此外,&>重定向运算符是一种基础。
if stat --printf='' /path/to/your/files* 2>/dev/nullthen echo foundelse echo not foundfi
更好的是GNU find,它可以在内部处理通配符搜索并在它找到一个匹配文件时立即退出,而不是浪费时间处理由shell扩展的潜在巨大的列表; 这也避免了shell可能溢出其命令行缓冲区的风险。
if test -n "$(find /dir/to/search -maxdepth 1 -name 'files*' -print -quit)"then echo foundelse echo not foundfi
非GNU版本的发现可能没有-maxdepth这里用来做选择查找搜索只/ /目录为/搜索,而不是扎根在那里的整个目录树。
添加回答
举报
0/150
提交
取消