[중복] 디렉터리에 여러 파일이 있는지 확인하세요.

[중복] 디렉터리에 여러 파일이 있는지 확인하세요.

디렉터리에 있는 여러 파일을 찾는 방법 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*.csvcc*.rptcc*.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로 볼 수 없습니다.

관련 정보