ファイルに対してこのように動作するスクリプトがあります。
./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
3番目の解決策は、ループをスクリプト自体に移動することです。
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