Executar consultas mysql no Ubuntu 10.04 shell (cmd) armazenado em um arquivo (ordem desc pelo nome do arquivo)

3

Eu tenho uma pasta com cerca de 40 scripts SQL com nomes variados, Todos usando o padrão number description .sql . O número do arquivo consiste em 2 dígitos e vai de 01 a 40, nem todos os números deste intervalo são incluídos.

Eu gostaria de fazer uma iteração dessa pasta com arquivos e executá-los via mysql cmd em uma ordem de nome de arquivo DESC.

Como posso executá-los todos por mysql cmd em ordem decrescente de número de arquivo? Obrigado.

    
por TR7 03.06.2012 / 17:51

1 resposta

3

Se você quisesse executar os scripts em ordem lexicográfica crescente, poderia fazer

for x in *.sql; do
  mysql <"$x"
done

Listar os arquivos em ordem descendente pode ser feito facilmente em zsh , graças ao O qualificador de globo , mas não há recurso correspondente no bash. Em um prompt zsh:

for x in *.sql(On); do
  mysql <"$x"
done

A propósito, se seus números não tiverem um 0 à esquerda, você pode usar (nOn) aqui, para classificar 9 foo.sql antes de 10 bar.sql .

Usando apenas programas que estão em uma instalação padrão (mais mysql ), você pode listar os arquivos, classificá-los conforme desejado com sort (ou diretamente inverta a ordem com tac ) e iterar sobre o resultado.

for x in *.sql; do echo "$x"; done |
tac |
while IFS= read -r script; do mysql <"$script"; done
    
por Gilles 03.06.2012 / 18:29