パス内のすべてのスクリプトを実行する方法は?


13

パラメーターとしてパスを受け取るスクリプトがあるとします。そのパスにあるすべてのスクリプトを実行するにはどうすればよいですか?

回答:


14

パスでディレクトリへのパスを意味すると仮定した場合、を使用しますrun-parts。からman run-parts

run-parts - run scripts or programs in a directory

最初に、実行するすべてのスクリプトに実行権限を設定する必要があります。通常run-parts、ディレクトリは無視され、実行可能でないファイルもそのディレクトリに存在します。

実行する前に、--testオプションによって実行されるファイルを確認する必要があります。

run-parts --test /path/to/directory

run-parts実行されるスクリプトの厳密な命名規則があることに言及する必要があります。

If neither the --lsbsysinit option nor the --regex option is given 
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.

man run-partsより多くのアイデアを得るためにチェックしてください。


少し読んで、私はこれを見つけました:#!/ bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run for "$ scripts_to_run_dir" / * do if test -x "$ script"; それから "$ script" fi doneそれは私のために働いた、あなたはどう思いますか?
ラウタロアルバレス

あなたがそのスクリプトでやっている@LautaroAlvarez、簡単なコマンドで行うことができるrun-parts /home/you/Dropbox/scripts_to_run。..しかし命名については注意..be
heemayl

run-partsはクールです。ただし、cron.dを作成し、cron.noticeとしてsyslogに書き込みます。しかし、スキップ、一時ファイルとバックアップファイルのようなアイデアの良いソース、...
MMV-RU

9

スクリプトの名前が正しい場合、実行部分は機能します。スクリプトのrun-parts名前を複雑な命名規則に合わせて変更したくない場合は、次のような簡単なことを行うことができます。

for file in ~/target/*; do $file 2>/dev/null; done

これは、にあるすべてのファイル(およびディレクトリ)を実行しようとします~/target2>/dev/nullディレクトリや非実行可能ファイルを実行しようとすると、リダイレクトのエラーメッセージは、それは文句を言わないように。

または、より洗練されたものを試すことができます

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done

これにより、各結果がファイル([ -f $file ])であるか、実行可能([ -x $file ])であるかがチェックされ、両方のテストが成功した場合にのみ、ファイルの実行が試行されます。


-この1は私が働いているプロジェクト(フォークレポ)に私のために完全に働いたgithub.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh
ロブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.