我有一个脚本,其功能对于一个文件来说是这样的。
./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