Tengo un script que funciona así para un archivo.
./script 0001g.log > output
para dos o más archivos, como este
./script 0001g.log 0002g.log 0003g.log > output
El script toma un número especial de cada archivo de entrada y lo coloca en un archivo de salida.
Mi pregunta es que tengo 1000 archivos de entrada, ¿cómo puedo hacer un bucle para ejecutar mi script?
Respuesta1
Tienes algunas posibles soluciones:
Simplemente
$ ./script *g.log >output
... y espero que eso *g.log
no se expanda a algo que haga que la línea de comando sea demasiado larga. Esto no es muy robusto.
Si su secuencia de comandos no depende de la cantidad de archivos que se le asignan, es decir, si la salida simplemente se puede agregar a output
cada archivo de entrada, entonces esta es otra solución:
$ find ./ -type f -name "*g.log" | xargs ./script >output
Una tercera solución sería mover el bucle al propio script:
for f in *g.log; do
# old code using "$f" as file name
done
Esto no tiene el problema con la restricción de longitud de la línea de comando ya que está en un script.
La invocación del script ahora sería
$ ./script >output
Respuesta2
si
./script 0001g.log 0002g.log 0003g.log > output
ecuación
./script 0001g.log > output
./script 0002g.log >> output
./script 0003g.log >> output
entonces puedes usar loop o
`seq -f '%04gg.log' 10` | script > output
Respuesta3
Si lo desea, puede colocar los archivos en un directorio.
/opt/location/source
/0001g.log
/0002g.log
/0003g.log
Luego, en tu script bash puedes probar lo siguiente
#!/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