Como fazer um loop para executar muitos arquivos

0

Eu tenho um script que funciona assim para um arquivo.

./script 0001g.log > output

para dois ou mais arquivos, como este

./script 0001g.log 0002g.log 0003g.log > output

O script pega um número especial de cada arquivo de entrada e o coloca em um arquivo de saída.

Minha pergunta é que eu tenho 1000 arquivos de entrada, como posso fazer um loop para executar meu script.

    
por alloppp 21.06.2016 / 01:55

3 respostas

0

Você tem algumas soluções possíveis:

Simplesmente

$ ./script *g.log >output

... e espere que *g.log não se expanda para algo que torne a linha de comando muito longa. Isso não é muito robusto.

Se o seu script não depender do número de arquivos fornecidos, ou seja, se a saída puder ser anexada a output para cada arquivo de entrada, essa é outra solução:

$ find ./ -type f -name "*g.log" | xargs ./script >output

Uma terceira solução seria mover o loop para o script em si:

for f in *g.log; do
  # old code using "$f" as file name
done

Isso não tem o problema com a restrição de comprimento da linha de comando, pois está em um script.

A invocação do script seria agora

$ ./script >output
    
por 21.06.2016 / 10:19
0

se

./script 0001g.log 0002g.log 0003g.log > output

eq.

./script 0001g.log > output
./script 0002g.log >> output
./script 0003g.log >> output

então você pode usar o loop ou

'seq -f '%04gg.log' 10' | script > output
    
por 21.06.2016 / 05:29
0

Se você quiser, pode colocar os arquivos em um diretório

/opt/location/source
    /0001g.log
    /0002g.log
    /0003g.log

Em seguida, no seu script bash você pode tentar o seguinte

#!/bin/bash

# store path to files
SOURCE="/opt/location/source/"

# loop through files
for FILE in 'ls $SOURCE*g.log'; do
    # do what you want to specific file
    echo $FILE
done
    
por 21.06.2016 / 09:52