1

という名前のフォルダーに多数のシェル スクリプトがあるとしますtest。特定の1つのファイルを除いて、その中のすべてのファイルを実行したい。私は何をしますか?ファイルを再配置したり、手動でファイルを次々に実行したりすることはできません。これを1行で行う方法はありますか。sh path/to/test/*.shそれとも、すべてのファイルを実行する に何かを追加するのでしょうか?

4

4 に答える 4

4
for file in test/*; do
    [ "$file" != "test/do-not-run.sh" ] && sh "$file"
done

を使用している場合はbash、拡張パターンを使用して望ましくないスクリプトをスキップできます。

shopt -s extglob
for file in test/!(do-not-run).sh; do
    sh "$file"
done
于 2012-08-31T12:20:07.587 に答える
1
for FILE in `ls "$YOURPATH"` ; do 
  test "$FILE" != "do-not-run.sh" && sh "$YOURPATH/$FILE"; 
done
于 2012-08-31T12:11:47.857 に答える
1

find path/to/test -name "*.sh" \! -name $pattern_for_unwanted_scripts -exec {} \;

検索は、.sh (-name "*.sh") で終わり、不要なパターン (\! -name $pattern_for_unwanted_scripts) に一致しないディレクトリ内のすべてのエントリを再帰的に実行します。

于 2012-08-31T12:23:46.660 に答える
0

bash、指定されたパターンの1つ以外に一致するものshopt -s extglobを使用できるようにする「拡張グロブ」を使用できます。!(pattern-list)

あなたの場合:

shopt -s extglob
for f in !(do-not-run.sh); do if [ "${f##*.}" == "sh" ]; then sh $f; fi; done
于 2012-08-31T12:26:39.523 に答える