複数のファイルを繰り返す方法

複数のファイルを繰り返す方法

ファイルに対してこのように動作するスクリプトがあります。

./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

関連情報