while loop condition - procura por padrão de string no bash

0

Estou alterando um script bash e preciso escrever um loop e testar se existe um arquivo de um padrão específico no diretório de origem.

O script funciona se eu designar um arquivo específico, mas não com um curinga ( file_patt* , por exemplo). Alguma ideia?

while [[ ! -e $SRC_DIR/file_patt* ]] ; do 
    echo "in loop"
done
    
por Unix NW 15.01.2015 / 17:15

1 resposta

0

Acho que posso resolver seu problema de maneira bastante simples.

Eu não quero usar funções não incorporadas:

unset i
rm *.txtx
# Now it is sure no matching file is in this dir
while a=(*.txtx) [ ! -e "$a" ]; do
   echo loop $i; 
   [ $((++i)) -eq 5 ] && >a.txtx # Creates a matching file if i == 5
done
ls *.txtx

A saída é:

loop
loop 1
loop 2
loop 3
loop 4
loop 5
a.txtx

Não é suficiente verificar o tamanho da matriz, como se não houvesse nenhum arquivo correspondente ao padrão, em seguida, o tamanho da matriz será 1 contendo o padrão *.txtx . Mas pode haver um arquivo chamado *.txtx , então -e deve ser usado para verificar se o resultado é apenas o próprio padrão ou um arquivo real.

Se mais arquivos correspondentes forem criados no loop, ainda funcionará, pois $a é o mesmo que ${a[0]} .

Espero que isso ajude!

    
por 15.01.2015 / 20:59

Tags