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 dúvida é que tenho 1000 arquivos de entrada, como posso fazer um loop para executar meu script.
Responder1
Você tem algumas soluções possíveis:
Simplesmente
$ ./script *g.log >output
... e espero que isso *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 depende do número de arquivos fornecidos a ele, ou seja, se a saída pode ser anexada a output
cada arquivo de entrada, esta é outra solução:
$ find ./ -type f -name "*g.log" | xargs ./script >output
Uma terceira solução seria mover o loop para o próprio script:
for f in *g.log; do
# old code using "$f" as file name
done
Isso não tem problema com a restrição do comprimento da linha de comando, pois está em um script.
A invocação do script seria agora
$ ./script >output
Responder2
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 loop ou
`seq -f '%04gg.log' 10` | script > output
Responder3
Se quiser você pode colocar os arquivos em um diretório
/opt/location/source
/0001g.log
/0002g.log
/0003g.log
Então, 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