使用 gnu-find 的退出状态测试文件是不是存在
Posted
技术标签:
【中文标题】使用 gnu-find 的退出状态测试文件是不是存在【英文标题】:Test file existence with exit status from gnu-find使用 gnu-find 的退出状态测试文件是否存在 【发布时间】:2012-06-29 18:54:48 【问题描述】:当test -e file
不够灵活时,我倾向于使用以下Bash习语来检查文件是否存在:
if [ -n "$(find $FIND_ARGS -print -quit)" ] ; then
echo "pass"
else
echo "fail"
fi
但由于我只对布尔值感兴趣,是否有任何$FIND_ARGS
可以让我这样做:
if find $FIND_ARGS ; ...
【问题讨论】:
【参考方案1】:我会说不。 man find
...
如果所有文件都成功处理,find 退出状态为 0,如果发生错误,则大于 0。这是特意做一个很笼统的描述,但是如果返回值非零,就不要依赖于find结果的正确性。
测试输出可能适合查找。这不是“Bash 习惯用法”。如果这还不够好,并且您有可用的 Bash,那么您可以使用 extglobs 和可能的 globstar 进行与[[
的文件匹配测试。 Find 应该只用于复杂的递归文件匹配,或实际搜索文件,以及其他使用 Bash 功能无法轻松完成的事情。
【讨论】:
以上是关于使用 gnu-find 的退出状态测试文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章