Cómo hacer un bucle para ejecutar muchos archivos

Cómo hacer un bucle para ejecutar muchos archivos

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.logno 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 outputcada 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

información relacionada