2017-07-17 69 views
0

我需要能够检查使用bash的文件目录中是否存在具有某个字符串的文件名。在这个例子中,我想检查是否有包含日期​​20171101在其文件名的文件:检查文件是否存在使用完整路径和通配符作为文件名bash

[ -e "/path/to/data/dir/*20171101*" ] && echo true || echo false 

当我在目录内使用find *20171101*它返回一个包含该日期的文件。但是,当我在完整路径上尝试相同的方法时,出现binary operator expected错误。这既适用于-e又适用于查找。

我需要的是能够使用通配符和完整路径呼应真/假当条件满足搜索文件。可以有多个文件,但当至少找到一个符合条件的文件时,它应该返回true。此外我需要执行它在1行。谢谢!

回答

1
[ -n "$(find /path/to/data/dir -name '*20171101*' | head -1)" ] && ... 

引用对防止shell在当前目录中展开它很重要。您需要使用test -n,因为单独的find不会告诉您它是否找到匹配项。当head -1找到匹配时停止,所以你不会浪费时间寻找更多。

+0

在不同的路径名和通配符上对它进行测试。奇迹般有效。谢谢! – cf2

相关问题