J'ai maintenant pour tâche d'exécuter plusieurs milliers de commandes de manière séquentielle. Les commandes sont toutes sous la forme $ /home/user/.lcmodel/bin/lcmodel < 2HzSNR100C2.5.txt
. Seuls les nombres (en gras type) diffèrent d'un fichier à l'autre. Les nombres sont générés à partir d'une boucle for
dans MatLab.
Par exemple, le nombre précédant Hz
sera 2
et 3
, le numéro après SNR
sera 100
et 200
, les chiffres après C
sera 2.5
, 3
et 3.5
. Dans ce cas, je dois exécuter 12 de ce type de commandes. Et oui, je n'ai besoin que de les exécuter sur une seule ligne, les codes détaillés sont déjà stockés dans les fichiers txt.
Je suis complètement nouveau sous Linux. Quelqu'un peut-il m'aider à écrire un fichier ou une commande pour exécuter ces milliers de commandes séquentiellement et automatiquement?
Si tous les fichiers se trouvent dans le répertoire de travail actuel (aucun n’est imbriqué dans un sous-répertoire), utilisez une boucle bash
for
(grâce à Incnis Mrsi pour le motif de sélection plus étroit):
for f in ?HzSNR???C*.txt; do /home/user/.lcmodel/bin/lcmodel < "$f"; done
Ce motif de globing spécifique est assez serré; Si vous utilisez également globing, la liste ordonnée des fichiers du répertoire de travail en cours sera développée dans l'instruction for
, ce qui aboutira en définitive au traitement des fichiers dans leur ordre numérique.
Si tous les fichiers ne sont pas dans le répertoire de travail actuel, utilisez find:
find . -type f -name '?HzSNR???C*.txt' -exec /home/user/.lcmodel/bin/lcmodel < {} \;
Cependant, utiliser find
en général ne garantit pas que les fichiers seront traités dans leur ordre numérique; si leur traitement dans l'ordre numérique est obligatoire, utilisez find
+ sort
+ xargs
:
find . -type f -name '?HzSNR???C*.txt' | sort | xargs -I file /home/user/.lcmodel/bin/lcmodel < file