即使文件夹为空,也会使用bash找到文件-测试目录是否为空
我想查看文件是否存在于某个文件夹中,如果存在,请运行某个事件,否则跳过此操作。Bash查看我的空文件夹中的文件 我尝试了几种不同的方法,所有这些方法都显示文件存在即使文件夹为空,也会使用bash找到文件-测试目录是否为空,bash,file,glob,Bash,File,Glob,我想查看文件是否存在于某个文件夹中,如果存在,请运行某个事件,否则跳过此操作。Bash查看我的空文件夹中的文件 我尝试了几种不同的方法,所有这些方法都显示文件存在 $ [ -f ] && echo "Found" || echo "Not found" Found $ [ -r ] && echo "Found" || echo "Not found" Found $ [ -e ] && echo "Found" || echo "Not foun
$ [ -f ] && echo "Found" || echo "Not found"
Found
$ [ -r ] && echo "Found" || echo "Not found"
Found
$ [ -e ] && echo "Found" || echo "Not found"
Found
鉴于它没有:
$ ls -lrt
total 0
我错过了什么
我的实际代码是:
get_last_parsed_file_time ()
{
if [ -s "$DATA_DIR$EPG_XML_FILES" ]
then
NEWEST_FILE=$( ls -tr | tail -1 )
LAST_PARSED_TIME=$( stat -c %Y $NEWEST_FILE )
else
NO_FILE=1
fi
}
[-f filename]
检查filename
是否是存在的文件
[str]
检查str
是否为非空
在您的例子中,str
是-f
,但它仍然只是检查字符串“-f”
是否为非空,而它显然不是空的(它是两个字符,一个破折号和一个“f”
)
这在
[-f$filename]
的情况下尤其令人费解。当$filename
为空且不带引号时,该命令将变为[-f]
,且为真。始终引用变量。[-f filename]
检查文件名是否存在
[str]
检查str
是否为非空
在您的例子中,str
是-f
,但它仍然只是检查字符串“-f”
是否为非空,而它显然不是空的(它是两个字符,一个破折号和一个“f”
)
这在[-f$filename]
的情况下尤其令人费解。当$filename
为空且不带引号时,该命令将变为[-f]
,且为真。始终引用变量。解释了为什么[-f]
不起作用
更一般地说,重要的是要注意,不能将globs(文件名模式,如*
传递给bash文件测试操作符,如-f
文件测试操作符期望一个单一的文本文件名或文件路径(作为字符串文本或存储在变量中的字符串)
下面是一个测试文件夹是否为空的片段,即它是否包含任何项目,无论是文件、隐藏文件还是子文件夹:
folder='/path/to/folder'
[[ -n $(ls -A "$folder" | head -n 1) ]] && echo "NON-empty" || echo "EMPTY"
只考虑非隐藏项,从<代码> ls 命令中删除<代码> ->代码>
- 要安静地忽略输入文件夹不存在或不可访问的情况,请将
2>/dev/null
附加到ls
命令
解释了为什么
[-f]
不起作用
更一般地说,重要的是要注意,不能将globs(文件名模式,如*
传递给bash文件测试操作符,如-f
文件测试操作符期望一个单一的文本文件名或文件路径(作为字符串文本或存储在变量中的字符串)
下面是一个测试文件夹是否为空的片段,即它是否包含任何项目,无论是文件、隐藏文件还是子文件夹:
folder='/path/to/folder'
[[ -n $(ls -A "$folder" | head -n 1) ]] && echo "NON-empty" || echo "EMPTY"
只考虑非隐藏项,从<代码> ls 命令中删除<代码> ->代码>
- 要安静地忽略输入文件夹不存在或不可访问的情况,请将
2>/dev/null
附加到ls
命令
或者,使用(在bash中)首选形式[…]]
,然后引用变量引用是可选的。无论如何,在大多数情况下。如果x='[wtf],则未引用,[[[[$x==$x]]]
为false“
谢谢-不知道这一点;是什么解释了这种意外行为?我理解-f,其他人也是这样吗?比如r/s/e?@mklement0==匹配一个模式,而不是一个字符串。当引用右侧时,它被认为是一个文本而不是一个全局。或者,使用(在bash中)首选形式[…]
,则引用变量引用是可选的。无论如何,在大多数情况下,[[[$x==$x]]]
如果x='[wtf],则为false“
Thank-我不知道;是什么解释了这种意外行为?我理解-f,其他人也是这样吗?比如r/s/e?@mklement0==匹配一个模式,而不是一个字符串。当引用右侧时,它被认为是一个文本而不是一个全局。谢谢。我必须检查大部分内容,因为我不熟悉它。@utamav:我修改了我的答案,希望对你更有帮助。谢谢。我必须检查大部分内容,因为我对它不熟悉。@utamav:我的答案被大幅修改,希望对你更有帮助。