文字 "a" で始まるディレクトリからすべてのシェルスクリプトを実行します。

文字 "a" で始まるディレクトリからすべてのシェルスクリプトを実行します。

文字「a」で始まるディレクトリには多くのシェルスクリプトがあります。これらすべてのシェルスクリプトを一度に実行するにはどうすればよいですか?これを実行するために開発できる他の小さなスクリプトはありますか?

答え1

コマンドライン:

for each in path_to_directory/a*.sh ; do bash $each ; done

例:

:~$ ll | grep \.sh
-rw-rw-r--  1 user user      1476 Май 25 16:07 123.sh
-rw-rw-r--  1 user user      1176 Май 25 16:09 222.sh
-rw-rw-r--  1 user user       419 Май 20 14:03 2.sh
-rw-rw-r--  1 user user       191 Май 20 17:50 3.sh
-rw-rw-r--  1 user user         9 Июн  2 11:53 a1.sh
-rw-rw-r--  1 user user         9 Июн  2 11:53 a2.sh

i:~$ cat  q1.sh
echo sadf
:~$ cat  a1.sh
echo 123
:~$ cat  a2.sh
echo 234

:~$ for each in ./a*.sh ; do bash $each ; done
123
234

あるいは、run-partsというコマンドラインユーティリティを使用することもできます。このツールは、ディレクトリ内の複数のスクリプトまたはプログラムを自動的に検索してすべて実行できます。

たとえば、名前が「a」で始まり、「.sh」で終わる/ etcのすべてのスクリプトを実行するには、次のようにします。

$ run-parts --regex '^a.*\.sh$' /etc

"--test"オプションを使用すると、実際に実行せずに実行されるスクリプトの名前を印刷できます。これはテスト目的に役立ちます。

$ run-parts --test ./my_script_directory

答え2

find . -maxdepth 1 -type f -perm /111 -name 'a*' -exec {} \;

または

find . -maxdepth 1 -type f -executable -name 'a*' -exec {} \;

これらのうちの1つは、a所有者、グループ、またはその他の実行ビットが設定されている現在のディレクトリ(サブディレクトリを除く)から始まるすべてのファイル名を見つけて実行しようとします。

たとえば、所有者とグループの実行ビットのみが設定されていて、ユーザーが所有者でもグループのメンバーでもない場合、試行は失敗する可能性があるため、「試行」と言います。この場合、ファイルを実行する権限がありません。

別の可能な失敗モードは、現在シェルが解釈できるスクリプトのみを実行できることです。したがって、awkorでperl始まるスクリプトはa実行されません。シェルスクリプトではないため、構文エラーのため失敗します。


別の方法は次のとおりです。

for f in ./a* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done

aシェルスクリプト、awkスクリプト、Perlスクリプト、バイナリファイルなど、実行可能ファイルの種類に関係なく、実行可能ファイルで始まる(ディレクトリではなく)すべてを実行します。

答え3

これを試してみることができます -

for i in a*; do file "$i"|grep -q 'script' && ./"$i"; done

説明する-

  1. for i ...- これはaで始まる各項目を繰り返すforループです。
  2. file "$i"|grep ... 文書このコマンドはファイルの種類を表示します。 「a」で始まる別のファイルまたはディレクトリがある可能性があるため、これは必要です。これgrep単語を探すスクリプト'ファイル出力から
  3. && ./"$i" ...検索に合格するとgrep成功すると、スクリプトが実行されます。

関連情報