J'adore vraiment les scripts Bash, alors j'espère que vous les aiderez. J'ai besoin d'un script qui va parcourir tous les dossiers, sous-dossiers, sous-dossiers, etc. à l'intérieur du dossier/home/work et s'il y a un fichier Makefile présent, il devrait exécuter la commande make install
La structure des dossiers est aléatoire, par exemple/maison/travail
- Dir 1
- - Dir 1.1
- - Dir 1.2
- - - Makefile
- Dir 2
- - Makefile
- Dir 3
- - Dir 3.1
- - Dir 3.2
- - - Dir 3.2.1
- - - Makefile
- - MakeFile
C'est ce que j'ai jusqu'ici
for f in /home/work/*;
do
[ -d $f ] && cd "$f" && echo Entering into $f && make install
done;
Si vous avez besoin d'informations supplémentaires, merci de me le faire savoir et je vous fournirai.
Utiliser find
:
_find /home/work -type f -name Makefile -execdir make install \;
_
find
recherche récursivement _/home/work
_ pour les fichiers (_-type f
_) nommé Makefile
(_-name Makefile
_) et exécute _make install
_ dans le répertoire où le fichier a été trouvé ( _-execdir make install \;
_).
Si vous utilisez bash, vous pouvez également activer _**
_ (qui est récursif):
_shopt -s extglob
_
Alors fais:
_for f in /home/work/**/;
do
[[ -f $f/Makefile ]] && echo Entering into "$f" && make -C "$f" install
done
_
Avec une barre oblique après le caractère générique, bash ne sélectionnera que les répertoires afin que vous puissiez éliminer cette vérification. Et make
a une option pour changer de répertoire avant de commencer: -C
. Ainsi, nous pouvons également éviter la cd
:
_-C dir, --directory=dir
Change to directory dir before reading the makefiles or doing
anything else. If multiple -C options are specified, each is
interpreted relative to the previous one: -C / -C etc is
equivalent to -C /etc. This is typically used with recursive
invocations of make.
_