ファイルを一括してスクリプトにフィード

ファイルを一括してスクリプトにフィード

次の命名規則に従うファイルがたくさんあります。

file1_d, file2_d, file3_d, ...,fileN_d

k最初のファイルを入力としてスクリプトに供給し、次のファイルkを2番目のバッチとして供給したいと思います。たとえば、配列を使用してシェルスクリプトでこれを行う簡単な方法はありますか?

ベストアンサー1

スクリプトを複数回実行し、スクリプトを実行するたびに、一度に1つずつ、一括してスクリプトのコマンドライン引数としてファイルを提供したいとします。 (要件のもう1つの解釈は、スクリプトが標準入力からファイルを読み込み、一度kに1つずつファイルをリンクして提供することです。以下のコードは、これらの解釈を達成するために少し変更するだけです。)

シェルでは、bashスクリプトに提供されているチャンク配列を使用できます。

配列を作成するには:

files=( file*_d )

これにより、ワイルドカードパターンが展開され、file*_d結果の名前がアルファベット順に配列に配置されます。数字順にファイル名が必要で、数字がゼロで埋められていない場合は、中かっこ拡張を使用する方が簡単です。

files=( file{1..N}_d )

...最大数はどこにあります(中括弧拡張範囲の変数は理解されていないため、実際の変数ではありませんN)。bash

zshシェルで次のように配列を作成できます。

files=( file<->_d )

...番号順に並べ替えてください。以下のコードはとzshシェルで動作しますbash

その後、次のループでスクリプトを呼び出すことができます。

k=10
while [ "${#files[@]}" -gt 0 ]; do
    ./myscript "${files[@]:0:k}"
    files=( "${files[@]:k}" )
done

これにより、配列の最初の全体が./myscript呼び出され、その項目が配列から削除されます。配列が空になるまで続きます。kfiles

おすすめ記事