15 votes

Comment exécuter tous les scripts dans un chemin ?

Supposons que j'ai un script qui reçoit un chemin comme paramètre. Comment pourrais-je exécuter tous les script situés dans ce chemin ?

16voto

heemayl Points 85741

En supposant que par chemin vous vouliez dire chemin vers un répertoire, utilisez run-parts . De man run-parts :

run-parts - run scripts or programs in a directory

Dans un premier temps, vous devez définir la permission d'exécution sur tous les scripts que vous voulez exécuter. Normalement, run-parts ignorera les répertoires et aussi les fichiers non exécutables résidant dans ce répertoire.

Bien qu'avant de l'exécuter, vous devriez vérifier quels fichiers seront exécutés par la commande --test option :

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

Je dois mentionner que run-parts a une convention de dénomination stricte pour les scripts à exécuter :

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.

Vérifiez man run-parts pour avoir plus d'idées.

10voto

Stewart Points 1385

Les parties d'exécution fonctionneront si vos scripts ont les bons noms. Si vous ne voulez pas vous occuper de renommer vos scripts pour qu'ils s'adaptent run-parts vous pouvez faire quelque chose d'aussi simple que

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

Cela tentera d'exécuter tous les fichiers (et répertoires) trouvés dans le répertoire ~/target . Le site 2>/dev/null redirige les messages d'erreur afin qu'il ne se plaigne pas lors de la tentative d'exécution de répertoires ou de fichiers non exécutables.

Vous pouvez également essayer la méthode plus sophistiquée

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

Ceci va vérifier si chacun des résultats est un fichier ( [ -f $file ] ), est exécutable ( [ -x $file ] ) et ce n'est que si ces deux tests sont concluants qu'il tentera d'exécuter le fichier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X