Profondeur maximale
J'ai trouvé que cela fonctionne bien avec La réponse de Jim Lewis il suffit d'ajouter un peu comme ça :
$ export DIR=/path/dir && cd $DIR && chmod -R +x *
$ find . -maxdepth 1 -type f -name '*.sh' -exec {} \; > results.out
Ordre de tri
Si vous voulez l'exécuter dans l'ordre de tri, modifiez-le comme ceci :
$ export DIR=/path/dir && cd $DIR && chmod -R +x *
find . -maxdepth 2 -type f -name '*.sh' | sort | bash > results.out
A titre d'exemple, cette opération sera exécutée dans l'ordre suivant :
bash: 1: ./assets/main.sh
bash: 2: ./builder/clean.sh
bash: 3: ./builder/concept/compose.sh
bash: 4: ./builder/concept/market.sh
bash: 5: ./builder/concept/services.sh
bash: 6: ./builder/curl.sh
bash: 7: ./builder/identity.sh
bash: 8: ./concept/compose.sh
bash: 9: ./concept/market.sh
bash: 10: ./concept/services.sh
bash: 11: ./product/compose.sh
bash: 12: ./product/market.sh
bash: 13: ./product/services.sh
bash: 14: ./xferlog.sh
Profondeur illimitée
Si vous voulez exécuter une profondeur illimitée sous certaines conditions, vous pouvez utiliser cette méthode :
export DIR=/path/dir && cd $DIR && chmod -R +x *
find . -type f -name '*.sh' | sort | bash > results.out
puis mettre au dessus de chaque fichier dans les répertoires enfants comme ceci :
#!/bin/bash
[[ "$(dirname `pwd`)" == $DIR ]] && echo "Executing `realpath $0`.." || return
et quelque part dans le corps du fichier parent :
if <a condition is matched>
then
#execute child files
export DIR=`pwd`
fi
3 votes
Je voudrais ajouter à la question. Peut-on le faire en utilisant xargs ? par exemple,
ls <directory> | xargs cmd [options] {filenames put in here automatically by xargs} [more arguments] > results.out
3 votes
C'est possible, mais vous avez probablement ne veulent pas utiliser
ls
pour conduirexargs
. Sicmd
est écrit de manière compétente, peut-être pouvez-vous simplement fairecmd <wildcard>
.