Executando um loop

0

Estou tentando criar um loop para verificar os arquivos em uma pasta e, em seguida, executar um loop se existirem arquivos na pasta e continuar executando o loop até que não haja mais arquivos, mas estou correndo para o erro do token, "sintaxe erro próximo do token inesperado 'do'. Aqui está o script que estou tentando executar.

files=/satellite/MSGVIS6/* 
if [ "${#files[@]}" -gt 0 ]; then
do
    mcenv << 'EOF'
    imgcopy.k MSGVI6D MSGVI6I BAND=1 SIZE=SAME
    imgremap.k MSGVI6I MSGVI6I.2 SIZE=ALL PRO=MERC RES=3.00
    imgcha.k MSGVI6I.2 STYPE=GVAR
    imgdel.k MSGVI6I.1
    exit
    EOF
    find /satellite/awips/ -type f -name 'AREA6022*' -exec mv '{}' /awips2/edex/data/manual/ \;
    rm -rf "$files"
    done

else
echo ''
echo "No files downloaded. New area files will not be created."
fi 

exit 0

Alguma opinião sobre o que eu posso estar escrevendo incorretamente?

    
por Justin B 15.06.2016 / 18:52

1 resposta

1

Assumindo o bash, em uma atribuição de variável simples, globbing não é executado:

$ a=*
$ echo "$a"
*

Para obter uma matriz, você precisa usar parênteses:

a=(*)

Por exemplo, em /usr :

$ a=(*)
$ echo "$a" "${a[@]}"
bin bin include lib lib32 lib64 local sbin share src

Então, sua primeira linha deve realmente ler:

files=(/satellite/MSGVIS6/*) 

Para expandir para todos os elementos em uma matriz a , use "${a[@]}" :

rm -rf "${files[@]}"

Outras notas:

  • Você pode usar mv -t para tornar o find mais eficiente com {} + :

    find /satellite/awips/ -type f -name 'AREA6022*' -exec mv -t /awips2/edex/data/manual/ {} +
    
  • Use apenas echo em vez de echo '' :

    echo
    echo "No files downloaded. New area files will not be created."
    
  • O exit 0 é inútil.
por muru 15.06.2016 / 19:51