bugfix> bash > 投稿

複数のファイルを含む一連のフォルダーがあります。

-Scenario_1
---- file_1.txt
---- file_2.txt
---- file_3.txt
-Scenario_2
---- file_1.txt
---- file_2.txt
---- file_3.txt

各フォルダーを反復処理し、ファイルを反復処理し、これらのすべてのファイルに関数を適用したい

build () {
    for folder in ./scenarios/*; do
        echo "Working on" $folder
        `function` (space separated list of files in the folder) -o $folder/output.txt
    done

}
build

コマンドの例として、次のようになります。 function file_1.txt file_2.txt file_3.txt -o $folder/output.txt

私は次を試しました:

`$(find。iname $folder/*。txt)

回答 2 件
  • find -iname  ベース名の一致のみ(一致と見なされるファイルの先頭のディレクトリが削除される)ので、式は何にも一致しません。 -ipath を使用する  代わりに。

    または、これらのフォルダーが決して空ではなく、サブディレクトリが含まれていないことがわかっている場合は、単純なグロビングで十分です。多数のバリアントがあります。これは動作するはずです:

    for folder in ./scenarios/*; do
      (cd $folder && function * -o output.txt)
    done
    
    

  • スペースで区切られたファイルのリストを作成したいようです。「ls -1」がこれを行い、検索の基準、つまり.txtファイルを指定できます。次に、関数で使用するファイルのリストがあります。

    build
    {
       for folder in ./scenarios/*
       do
          filelist=`ls -1 *.txt`
          `function` $filelist ....
       done
    }
    
    

あなたの答え