디렉터리에 있는 여러 파일을 찾는 방법 ksh
(1부 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 is my filename과 같은 오류가 발생합니다 .
내 스크립트에 무슨 문제가 있습니까? 누구든지 이 문제를 해결하도록 도와줄 수 있나요?
답변1
test -f
와일드카드에서 확장된 여러 파일에는 작동하지 않습니다. 대신 null-redirected 와 함께 셸 함수를 사용할 수 있습니다 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
cc*.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로 볼 수 없습니다.