如何通过通配符找到文件的路径:
文件路径:/DIRECTORY_random_number/myFile
#!/bin/bash
FILE='DIRECTORY_'*'/myFile'
if [ -f $FILE ]; then
echo "this is the full path of this file..."
fi
答案 0 :(得分:1)
使用变量不是解决此问题的最佳方法。此外,与单/双引号一起使用时,glob不会扩展。使用数组,如果您要查找的是单个文件,则可以使用*
shopt -s nullglob
filePath=(/DIRECTORY_*/newfile)
if (( "${#filePath[@]}" )); then
printf 'Matching file name found as %s\n' "${filePath[*]}"
fi
如果再次使用bourne shell bash
,请启用并扩展shell选项nullglob
,以使空扩展不属于数组。
这种方法比进行无引号的变量扩展(如果文件名中包含特殊字符)对文件名进行Word-Splitting更好。
答案 1 :(得分:1)
您可以按for
循环执行此操作,尤其是在没有数组的POSIX shell中。
for f in DIRECTORY_*/myFile; do
if [ -f "$f" ]; then
...
fi
break
done
是否需要break
语句是一个判断电话。您的意图是该模式仅匹配一个文件,但是您可以保证吗?如果可以,则不需要break
。当然,如果匹配匹配多个文件,您如何知道第一个匹配就是您实际想要的文件?通常,这样假设您的文件系统是一个坏主意。 了解您要查找的文件,而不是假设您的模式有唯一的匹配项。