检查目录中是否存在多个文件

检查目录中是否存在多个文件

如何查找目录中存在的多个文件ksh(上AIX

我正在尝试以下一种:

if [ $# -lt 1 ];then
    echo "Please enter the path"
    exit
fi
path=$1
if [ [ ! f $path/cc*.csv ] && [ ! f $path/cc*.rpt ] && [ ! f $path/*.xls ] ];then
    echo "All required files are not present\n"
fi

我收到类似check[6]: !: unknown test operator//check 是我的文件名的错误。

我的脚本出了什么问题。有人可以帮我解决这个问题吗?

答案1

test -f不适用于从通配符扩展的多个文件。相反,您可以使用带有 null-redirected 的 shell 函数ls

present() {
        ls "$@" >/dev/null 2>&1
}

if [ $# -lt 1 ]; then
    echo "Please enter the path"
    exit
fi
path=$1
if ! present $path/cc*.csv && ! present $path/cc*.rpt && ! present $path/*.xls; then
    echo "All required files are not present\n"
fi

顺便说一句,使用起来好吗&&?在这种情况下,仅当中not present没有名为cc*.csvorcc*.rpt或 的文件时才会得到。cc*.xls$path

答案2

if [ [ ! f $path/cc*.csv ] && [ ! f $path/cc*.rpt ] && [ ! f $path/*.xls ] ];then
    echo "All required files are not present\n" fi

check[6]: !:未知测试操作员

我想你忘记了操作数 ' f' 是一个未知的操作数 --> '-f'

if [ [ ! -f $path/cc*.csv ] && [ ! -f $path/cc*.rpt ] && [ ! -f $path/*.xls ] ];then
    echo "All required files are not present\n"
fi

在你的情况下你全部文件必须丢失才能回显您的...这当然取决于您的目标。

我无法在 AIX 上的 ksh 中查看它。

相关内容