`sh my_dir/subdir*/qsub.sh` 形式のすべてのスクリプトを実行する方法

`sh my_dir/subdir*/qsub.sh` 形式のすべてのスクリプトを実行する方法

次の形式の複数のディレクトリがあります。

my_dir/subdir*/qsub.sh

各サブディレクトリのすべてのエントリを実行したいがqsub.sh実行しようとすると

sh my_dir/subdir*/qsub.sh

qsub.sh単一のサブディレクトリに対してのみ実行されるようです。なぜこのようなことをするのですか?

答え1

コマンドが機能しない理由は、シェルが最初の一致を実行し、残りの一致が最初のスクリプトに引数として渡されるためです。

ディレクトリを繰り返し、各スクリプトを個別に実行する必要があります。

例えば

for script in my_dir/subdir*/qsub.sh ; do
  sh "${script}"
done

答え2

bxmがすでに述べたように、シェルは次のコマンドを拡張します。

sh my_dir/subdirA/qsub.sh my_dir/subdirB/qsub.sh my_dir/subdirC/qsub.sh

my_dir/subdirA/qsub.sパラメータとして実行されます。my_dir/subdirB/qsub.sh my_dir/subdirC/qsub.sh

forループの代替は次のとおりです。

find my_dir -name qsub.sh -exec sh '{}' \;

初心者のための拡張ヒント: すべてのスクリプトを実行可能にし(chmod +x)、適切なshebangで始めます(たとえば#!/usr/bin/env sh)。その後、スクリプトを実行可能にしてアクティブにすることができ、実行ロジックを変更することなくPython、Perl、またはバイナリなどの他のスクリプト言語を使用することもできます。

次に検索を実行します。

find my_dir -type f -executable -name qsub.sh -exec '{}' \;

確認する人々が見つけたシンボリックリンクの処理方法や検索の深さを制御するオプションです。

関連情報