Verifique se existem vários arquivos no diretório

2

Como encontrar vários arquivos presentes em um diretório em ksh (on AIX )

Estou tentando abaixo de um:

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

Estou recebendo um erro como check[6]: !: unknown test operator // check é o nome do meu arquivo.

o que está errado no meu script. Alguém poderia me ajudar nisso?

    
por Aravind 27.08.2015 / 12:20

2 respostas

1

test -f não funcionará para vários arquivos expandidos de curingas. Em vez disso, você pode usar uma função de shell com ls redirecionada a zero.

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

Por falar nisso, é bom usar && ? Nesse caso, você recebe not present apenas quando não houver arquivos com o nome cc*.csv ou cc*.rpt ou cc*.xls in $path .

    
por 27.08.2015 / 13:03
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]: ! : operador de teste desconhecido

Eu acho que você esqueceu o operando ' f ' é um operando desconhecido - > ' -f '

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

No seu caso, você todos arquivos devem estar faltando antes que ele vai ecoar o seu ... é claro que dependem do seu objetivo.

Eu não posso verificá-lo em ksh no AIX.

    
por 04.12.2017 / 13:12