我尝试仅在存在某种文件类型时才执行任务 - 所以我有这个
if [ -e `find /directory -type f -name "*.filetype" | head -1`];
then ...
这总是评估为真(即使不存在这样的文件类型 - 我最终意识到这一点:
if [ -e ]
评估为 true(即,如果没有给出任何内容 - 当我的条件找不到文件类型时会发生这种情况) - 有谁知道我应该做什么才能得到我需要的东西?
我最近学会了这个技巧:
if [[ $(find /directory -type f -name "*.filetype" 2>/dev/null) ]]; then
...
fi
- 我们将 stderr 重定向到
/dev/null
以隐藏任何错误消息 - 如果文件同时满足这两个条件,则
find
的输出将为非空,否则将为空。 - 如果 find 的输出分别为非空白或空白,则
[[ ... ]]
的计算结果分别为 true 或 false。
我之前使用过不同的版本:
if find /directory -type f -name "*.filetype" 2>/dev/null | grep -q .; then
...
fi
但这不太好,因为它使用了额外的grep
过程。第一种解决方案通过单个find
过程实现了相同的效果。
你的行是正确的
if [ -n "`find /directory -type f -name '*.filetype'`" ] ;
-n
非空字符串的测试。
如注释中所述,不推荐使用反引号语法,取而代之的是$()
语法。