我有一个简单的if语句,用于检查目录中是否存在文件。如果匹配,则返回OK,否则,它返回FAIL。
if [[ -f Foobarfile_"${TODAY}"*.txt ]]; then echo "OK"; else echo "Fail!"; fi
$TODAY
是具有YYYY-MM-DD格式的日期戳。
如果我在目录Foobarfile_2016-01-15_100.txt中作为唯一文件,则if语句将返回true。
我很困惑,因为如果目录有多个文件,if语句将返回false。例如。如果它有另一个名为“Foobarfile_2016-01-15_101.txt”的文件
只要目录中的文件名具有今天的日期戳,即基本上应该检查:
Foobarfile_2016-01-15_100.txt
Foobarfile_2016-01-15_101.txt
somethingelse_2016-01-15_102.txt
KrispyKreme_2016-01-14_98.txt
Foobarfile_2016-01-15_104.txt...
它应该返回true。任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:2)
如果我理解正确,您想测试一个或多个文件是否包含今天的日期。一种方法是使用数组:
shopt -s nullglob
files=( Foobarfile_"${TODAY}"*.txt )
if [[ ${#files} -ge 1 ]]; then
echo "OK"
fi
shopt -s nullglob
设置nullglob
shell option。设置此选项后,如果没有文件与模式匹配,则数组将为空。否则,失败的扩展将导致该数组包含一个元素,例如Foobarfile_2016-01-15*.txt
。
答案 1 :(得分:0)
如果Statement的类型为[[expression]]
不会发生路径名扩展,请参阅Bash手册。
在您的情况下,表达式[[将搜索带有名称的文件 Foobarfile_2016-01-15 * .txt不存在。
那是你正在“失败”打印。
答案 2 :(得分:0)
[ -f Foobarfile_$(date --rfc-3339=date)*.txt ] && echo "OK" || echo "no joy"