文字「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
所有者、グループ、またはその他の実行ビットが設定されている現在のディレクトリ(サブディレクトリを除く)から始まるすべてのファイル名を見つけて実行しようとします。
たとえば、所有者とグループの実行ビットのみが設定されていて、ユーザーが所有者でもグループのメンバーでもない場合、試行は失敗する可能性があるため、「試行」と言います。この場合、ファイルを実行する権限がありません。
別の可能な失敗モードは、現在シェルが解釈できるスクリプトのみを実行できることです。したがって、awk
orで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
説明する-
for i ...
- これはaで始まる各項目を繰り返すforループです。file "$i"|grep ...
文書このコマンドはファイルの種類を表示します。 「a」で始まる別のファイルまたはディレクトリがある可能性があるため、これは必要です。これgrep単語を探すスクリプト'ファイル出力から&& ./"$i" ...
検索に合格するとgrep成功すると、スクリプトが実行されます。