我需要能够使用 bash 检查文件目录中是否存在具有特定字符串的文件名。在此示例中,我想检查是否存在文件20171101名中包含日期的文件:
[ -e "/path/to/data/dir/*20171101*" ] && echo true || echo false
Run Code Online (Sandbox Code Playgroud)
当我find *20171101*在目录中使用时,它会返回包含该日期的文件。但是,当我在完整路径上尝试相同的方法时,我收到错误binary operator expected。这适用于 -e 和 find。
我需要的是能够使用通配符和完整路径搜索文件,并在满足条件时回显 true/false 。可以有多个文件,但当至少找到 1 个满足条件的文件时,应返回 true。此外,我需要在 1 行中执行它。谢谢!
[ -n "$(find /path/to/data/dir -name '*20171101*' | head -1)" ] && ...
Run Code Online (Sandbox Code Playgroud)
引号对于防止 shell 在当前目录中扩展它很重要。您需要使用test -n,因为find单独使用不会告诉您是否找到匹配项。当找到匹配项时就会head -1停止,因此您不必浪费时间寻找更多。