如何在路径中使用通配符“测试-f”?

时间:2017-08-27 21:33:00

标签: bash

如何使用test -f $PREFIX/lib/python3.6/some_file 以及路径中的通配符查看文件是否存在?

这有效:

test -f $PREFIX/lib/python*/some_file

这不起作用(我在这里做错了什么?):

{{1}}

如果文件不存在,我需要非零退出代码。

3 个答案:

答案 0 :(得分:1)

您需要迭代文件,因为test -f仅适用于单个文件。我会使用shell函数:

#!/bin/sh
# test-f.sh

test_f() {
    for fname; do
        if test -f "$fname"; then
            return 0
        fi
    done
}

test_f "$@"

然后测试运行可能

$ sh -x test-f.sh
$ sh -x test-f.sh doesnotexist*
$ sh -x test-f.sh *

答案 1 :(得分:1)

将通配符展开为数组,然后检查第一个元素:

f=($PREFIX/lib/python*/some_file)
if [[ -f "${f[0]}" ]]; then echo "found"; else echo "not found"; fi
unset f

答案 2 :(得分:0)

来自test的手册页:

-f file True if file exists and is a regular file

表示test -f <arg>期望arg成为单个文件。如果路径中的通配符导致多个文件,则会引发错误。

使用通配符时尝试迭代:)