2017-03-06 3 views
0

私は引数として画像を受け取るC++ファイルを持っています。スクリプトを実行するために必要なディレクトリがあります。それは次のようになります。ディレクトリを引数とするC++ファイルを実行しますか?代わりにBashを使用しますか?

- parent 
-- sub0 
--- 0.pgm 
--- 1.pgm 
--- ... 
-- sub1 
--- 0.pgm 
--- 1.pgm 
--- ... 
-- ... 

parentは120個のサブフォルダが含まれており、各サブフォルダには、100〜200個の.pgmファイルが含まれています。 C++ファイルの引数は.pgmです。

file.cpp filename.pgm何千回も実行するのではなく、C++で引数としてフォルダを取る方法はありますか?親フォルダに

  1. コールfile.cppが、それは再帰的にサブフォルダとファイルを介して動作
  2. ではなく

バッシュ、いくつかの擬似コードでバッシュでそれを実行します。私は、理想的にはどちらかしたいと思います:

g++ -march=native -O2 file.cpp -o output 
for $filename in folder 
    ./output $filename 
endfor 

これはどのようにして達成できますか?

+0

ファイル名の代わりにディレクトリを使用するようにプログラムを編集しますか?または、フラグを使用して両方を除いた場所にしますか? – NathanOliver

+2

'findのようなコマンドラインはどうですか? -name "* .pgm" -exec ./output {} \; '? –

+0

@FredLarson findコマンドは、それ自身を順番に実行することに注意してください。たくさんのファイルがある場合、パラレルaproachが好ましいかもしれません。 – Aserre

答えて

2

forループは、ディレクトリの内容ではなく、文字列のリストを反復処理します。あなたが望むファイルのリストに展開するには、globが必要です。

shopt -s globstar 
for filename in folder/**/*.pgm; do 
    ./output "$filename" 
done 
関連する問題