如何查找目录中存在的多个文件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*.csv
orcc*.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 中查看它。