web-dev-qa-db-fra.com

Boucle dans tous les dossiers et l'exécution du script

J'ai un script bash install.sh dans mon répertoire actuel et un répertoire apps qui contient plusieurs répertoires. Je veux parcourir ces sous-répertoires dans le dossier de l'application et exécuter un script. Après avoir exécuté le script dans le premier dossier, il devrait revenir et entrer dans le prochain dossier. J'ai essayé cela mais je saute les uns après les autres. Je veux dire qu'il entre dans tous les dossiers impairs et non dans des dossiers pairs.

Code dans install.sh

for f in apps/*;
  do 
     [ -d $f ] && cd "$f" && echo Entering into $f and installing packages
     cd ..
  done; 
7
devo

Utilisez le chemin complet de votre répertoire parent (dans mon cas, le répertoire appssitué dans mon répertoire personnel) et supprimez une commande supplémentaire (cd ..).

for f in ~/apps/*;
  do 
     [ -d $f ] && cd "$f" && echo Entering into $f and installing packages
  done;

Voir capture d'écran: avec la commande cd .. et en utilisant apps/*

enter image description here

Voir capture d'écran: sans la commande cd .. et en utilisant ~/apps/*

enter image description here

9
αғsнιη

Vous pouvez utiliser find avec exec pour cette proposition. Votre install.sh devrait être

#!/bin/bash
find ./apps -type d -exec echo Entering into {} and installing packages \; 

remplace le texte après -exec par votre commande

par exemple

#!/bin/bash
find ./apps -type d -exec touch {}/test.txt  \;  

Il parcourra app et tous ses sous-répertoires et créera un fichier text.txt

2
g_p