ファイル名を変数として実行可能プログラムに渡すにはどうすればよいでしょうか?

ファイル名を変数として実行可能プログラムに渡すにはどうすればよいでしょうか?

これは比較的簡単な質問です。ループ内の実行可能プログラムに複数のファイルを渡そうとしています。複数の戦略 (配列に格納するなど) を試しましたが、ファイル名が変数として認識されないようです。表示されるエラーは次のとおりです: そのようなファイルまたはディレクトリはありません。

私の最新の試みの概要:

FILES=path/*/*

for f in $FILES
do
./function -input $f 
done

私はbashシェルで作業しています。

答え1

グロブ展開シーケンスを格納するためにプレーンな変数を使用する代わりに、適切な配列を使用し、シェルのグロブオプションを有効にしてglobstarすべてのサブディレクトリのファイルを読み込むことをお勧めします。

shopt -s globstar nullglob
file_list=(path/**/*)

配列をループして各ファイルを処理します

for file in "${file_list[@]}"; do
    printf '%s\n' "$file"
    # Your other actions on file goes here
done

関連情報