bsub < 複数のファイルの検索と実行

bsub < 複数のファイルの検索と実行

*.lsf現在のコンテンツを見つけてファイルの検索をすべて/subdirectories実行する予定です。bsub<*.lsf私は試した:

find ./ -type f -name "*.lsf" -exec bsub < \;

この部分はfind ./ -type f -name "*.lsf"うまくいきます。しかし、実装に問題がありました。

この質問に答えるのに役立つ人はいますか?

答え1

最初の試みでほぼ成功しました。あなたがすべきことは、シェルを呼び出して<リダイレクト演算子を解決することです。

find -name '*.lsf' -exec bash -c 'bsub <"$1"' _ {} \;

ただし、一致するファイルごとにシェルを起動するので、これは非常に効率的ではありません。できるだけ少数のシェル呼び出しを実行し、ループを使用して複数のファイルを一度に処理します。

find -name '*.lsf' -exec bash -c 'for i in "$@"; do bsub <"$i"; done' _ {} +

どちらもファイル名は安全です(つまり、ファイル名のスペースと非印刷/半印刷文字を処理します)。

答え2

次のように作業できますxargs

find ./ -type f -name "*.lsf" | xargs bsub

実際には、穴を次のように減らすことができます。

find *.lsf | xargs bsub

説明:私が使用しているクラスターでテストされました。

編集:文字列置換オプションと文字リダイレクトを削除しました。

答え3

xargs効率的な方法で活用してみてください。 (@KamilMaciorowskiが言ったように、これは安全ではありません。)

find . -type f -iname "*.lsf" | xargs -I {} bash -c 'cat < {}'

次に、ファイル名のスペースなどを修正します。

find . -type f -iname "*.lsf" -print0 | xargs -0 -I {} bash -c 'cat < {}'

私はそれをテストしましたcat。あなたはあなたの命令に置き換える必要があります

関連情報