GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter tous les scripts dans un répertoire sous Linux

L'autre jour, j'ai testé quelques scripts shell de base que j'ai créés pour le plaisir. Comme je suis nouveau dans les scripts shell, j'ai exécuté et testé les scripts un par un. C'était OK s'il n'y avait que quelques scripts. Au fur et à mesure que le nombre de scripts augmentait, je trouve que cela prend un peu de temps de les tester tous. Après quelques recherches sur le Web, j'ai découvert quelques méthodes pour exécuter tous les scripts d'un répertoire sous Linux, l'un après l'autre.

Exécuter tous les scripts dans un répertoire sous Linux

J'ai quelques scripts dans mon répertoire Documents.

$ ls Documents/
linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh

Tous sont de simples scripts shell à une ligne qui affichent la ou les chaînes données à l'aide de la commande "echo" dans la sortie standard.

Avant de savoir que nous pouvions exécuter tous les scripts d'un dossier, je rendais généralement le script exécutable comme :

$ chmod +x script.sh

Ensuite, je l'exécute à l'aide de la commande :

$ ./script.sh

Ou,

$ sh script.sh

Encore une fois, je rends le deuxième script exécutable et je l'exécute et ainsi de suite.

Eh bien, il y a une meilleure façon de faire cela. Nous pouvons exécuter tous les scripts dans un répertoire ou un chemin en utilisant "run-parts" commande. La commande run-parts est utilisée pour exécuter des scripts ou des programmes dans un répertoire ou un chemin.

$ run-parts <directory-path>

Un inconvénient de la commande run-parts est qu'elle n'exécutera pas tous les scripts. Cela ne fonctionnera que si vos scripts ont les noms corrects. Les noms doivent être entièrement composés de lettres majuscules et minuscules ASCII, de chiffres ASCII, de traits de soulignement ASCII et de traits d'union moins ASCII.

Pour résoudre ce problème de nommage, nous pouvons utiliser la regex option. Par exemple, la commande suivante trouvera et exécutera tous les fichiers de script dans ~/Documents répertoire qui commence par la lettre 's' et se termine par l'extension 'sh' :

$ run-parts --regex '^s.*sh$' ~/Documents

Exécutez tous les scripts dans un répertoire sous Linux avec la commande run-parts

Dépannage :

Si vous avez rencontré une erreur comme ci-dessous ;

run-parts: failed to exec Documents/script1.sh: Exec format error

Reportez-vous au guide suivant pour résoudre ce problème.

  • Correction "Erreur de format Exec" lors de l'exécution de scripts avec la commande run-parts

De même, pour exécuter tous les fichiers de script qui se terminent par .sh dans le répertoire Documents, exécutez :

$ run-parts --regex '.*sh$' ~/Documents

Pour imprimer les noms de tous les fichiers du répertoire Documents qui commencent par la lettre 's' et se terminent par l'extension 'sh', exécutez :

$ run-parts --list --regex '^s.*sh$' Documents
Documents/script1.sh
Documents/script2.sh
Documents/script3.sh
Documents/script4.sh

Cette commande imprimera uniquement le nom des fichiers de script, mais ne les exécutera pas.

Pour lister tous les fichiers se terminant par .sh dans le répertoire Documents, exécutez :

$ run-parts --list --regex '.*sh$' Documents
Documents/linux.sh
Documents/ostechnix.sh
Documents/script1.sh
Documents/script2.sh
Documents/script3.sh
Documents/script4.sh

La commande run-parts est principalement utilisée par les tâches cron et n'est pas fiable pour une utilisation manuelle.

Une autre façon d'éviter de devoir renommer vos scripts pour s'adapter à run-parts structure de nommage, vous pouvez utiliser rechercher ou boucle for commandes.

Pour rechercher et exécuter tous les fichiers de script commençant par la lettre "s" dans le dossier ~/Documents, exécutez :

$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;

Si vous souhaitez exécuter tous les scripts dans le répertoire donné et tous ses sous-répertoires, supprimez le maxdepth option dans la commande ci-dessus :

$ find ~/Documents -type f -executable -name 's*' -exec {} \;

Pour exécuter tous les scripts qui se terminent par l'extension ".sh" , exécutez :

$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;

Recherchez et exécutez tous les scripts d'un répertoire sous Linux à l'aide de la commande find

Cette méthode présente également un inconvénient mineur. Cette commande ne peut exécuter que les scripts pouvant être interprétés par votre shell actuel. Si vous souhaitez exécuter tous les types de scripts, par exemple awk, perl, python, scripts shell, utilisez la boucle for méthode comme ci-dessous.

$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done

La commande ci-dessus exécutera les scripts commençant par la lettre "s" dans le dossier ~/Documents. Si vous souhaitez exécuter tous les fichiers qui se terminent par l'extension ".sh", faites :

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

Pour plus de détails, consultez les pages de manuel.

$ man run-parts
$ man find

J'espère que cela vous aidera.


Linux
  1. Comment mettre à jour un lien symbolique Linux

  2. Comment trouver un fichier sous Linux dans tous les répertoires de manière récursive

  3. Linux - Comment exécuter un chargeur de démarrage à partir de Linux ?

  4. Comment compresser un répertoire sous Linux

  5. Comment exécuter Linux sur PS3 ?

Comment exécuter des commandes Linux en arrière-plan

Comment compter les fichiers dans le répertoire sous Linux

Comment exécuter Windows 95 sous Linux

Comment configurer SFTP chrooté sous Linux

Comment exécuter les commandes de fichier .sh tout en une fois sous Linux

Comment copier un répertoire sous Linux