特定のフォルダ内のすべてのシェルスクリプトを見つけて順番に実行する

特定のフォルダ内のすべてのシェルスクリプトを見つけて順番に実行する

私のサーバーを構成するための多くのシェルスクリプトを含むフォルダがあります。

私のデフォルトスクリプトの名前は "setup.sh"で、他のすべてのスクリプトの名前は0.script.sh、1.script.sh ...、より一般的にはN.SCRIPT_NAME.shです。ここで、Nは実行番号です。

したがって、そのフォルダ内のすべてのシェルスクリプトを一覧表示し、N番号で指定された順序で実行しようとしています。

ベストアンサー1

zshを使用してファイル名を順番に取得する簡単な方法があるかもしれませんが、以下はbashの無差別アプローチです。

for script in ?.script*.sh ??.script*.sh ???.script*.sh ????.script*.sh
do
  printf "Executing script: %s\n" "$script"
  ./"$script"
done

これは、スクリプトのファイル名のプレフィックス部分に9999個以下、より正確には4個以下の数字(文字)があると仮定します。

また、プレフィックスが次のようになると仮定します。番号付き- それ〜するたとえば、名前付きスクリプトを選択します(go.script_X.sh存在する場合)。解決策それ?は次のように置き換えられます[0-9]

for f in [0-9].script*.sh [0-9][0-9].script*.sh ...

シェルの自然なグロービングメカニズムは、結果ファイル名をアルファベット順にソートするため、数値順にもソートされます。いろいろなファイル名はますます比率で表記されるので、「9」が「101」の前に来る式です。

zsh では、プレフィックスに基づいて数値順に glob ファイル名を指定します。

for script in *.script*.sh(oe_'REPLY=${REPLY%%.*}'_n)
do
  printf "Executing script: %s\n" "$script"
  ./"$script"
done

*.script*.shglobbing 拡張は、まずすべてのファイルを選択し、次にできるだけ多くの「ドットの後にあるすべて」を削除し、プレフィックスを抽出する式を使用してoファイルをソート(整列)し、数値でソートします。en

おすすめ記事