如何循环执行多个文件

如何循环执行多个文件

我有一个脚本,其功能对于一个文件来说是这样的。

./script 0001g.log > output

对于两个或多个文件,像这样

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

该脚本从每个输入文件中获取一个特殊数字并将其放入一个输出文件中。

我的问题是我有 1000 个输入文件,如何循环执行我的脚本。

答案1

您有几种可能的解决方案:

简单地

$ ./script *g.log >output

...并希望这*g.log不会扩展到使命令行太长的情况。这不是很稳健。

如果您的脚本不依赖于为其提供的文件数量,即如果可以将输出附加到output每个输入文件,那么这是另一个解决方案:

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

第三种解决方案是将循环移至脚本本身:

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

这不存在命令行长度限制的问题,因为它位于脚本中。

脚本的调用现在是

$ ./script >output

答案2

如果

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

等式

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

那么你可以使用循环或

`seq -f '%04gg.log' 10` | script > output

答案3

如果您愿意,可以将文件放入目录中

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

然后在你的 bash 脚本中你可以尝试以下操作

#!/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

相关内容