Executa milhares de comandos sequencialmente

4

Eu tenho uma tarefa agora para executar alguns milhares de comandos sequencialmente. Os comandos estão todos no formato $ /home/user/.lcmodel/bin/lcmodel < 2HzSNR100C2.5.txt . Somente os números (no tipo negrito ) são diferentes de arquivo para arquivo. Os números são gerados a partir de um loop for no MatLab.

Por exemplo, o número antes de Hz será 2 e 3 , o número após SNR será 100 e 200 , números após C serão 2.5 , 3 e 3.5 . Neste caso, eu tenho que executar 12 deste tipo de comandos. E sim, eu só preciso executá-los como linhas simples, os códigos detalhados já estão armazenados nos arquivos txt.

Sou completamente novo no Linux, alguém pode me ajudar a escrever um arquivo ou um comando para executar esses milhares de comandos sequencialmente e automaticamente?

    
por Charlie So 07.09.2015 / 14:39

1 resposta

12

Se todos os arquivos estiverem no diretório de trabalho atual (ou seja, nenhum está aninhado em algum subdiretório), use um loop bash for (graças ao Incnis Mrsi para o padrão de globbing mais estreito):

for f in ?HzSNR???C*.txt; do /home/user/.lcmodel/bin/lcmodel < "$f"; done

Esse padrão específico de globbing é bem apertado; também usar o próprio globbing resultará na lista ordenada dos arquivos no diretório de trabalho atual a serem expandidos na instrução for , resultando, em última análise, nos arquivos que estão sendo processados em sua ordem numérica;

Se nem todos os arquivos estiverem no diretório de trabalho atual, use find:

find . -type f -name '?HzSNR???C*.txt' -exec /home/user/.lcmodel/bin/lcmodel < {} \;

No entanto, usar find em geral não garante que os arquivos sejam processados em ordem numérica; Se processá-los em ordem numérica for obrigatório, use find + sort + xargs :

find . -type f -name '?HzSNR???C*.txt' | sort | xargs -I file /home/user/.lcmodel/bin/lcmodel < file
    
por kos 07.09.2015 / 15:34