Execução de todos os scripts de shell em um diretório que começa com a letra 'a'

4

Eu tenho muitos scripts de shell em um diretório começando com a letra 'a'. Como eu poderia executar todos esses scripts de shell em um tiro? Podemos desenvolver qualquer outro script pequeno para executar isso?

    
por vamsi krishna 02.06.2016 / 10:21

3 respostas

10

linha de comando:

for each in path_to_directory/a*.sh ; do bash $each ; done

exemplo:

:~$ ll | grep \.sh
-rw-rw-r--  1 user user      1476 Май 25 16:07 123.sh
-rw-rw-r--  1 user user      1176 Май 25 16:09 222.sh
-rw-rw-r--  1 user user       419 Май 20 14:03 2.sh
-rw-rw-r--  1 user user       191 Май 20 17:50 3.sh
-rw-rw-r--  1 user user         9 Июн  2 11:53 a1.sh
-rw-rw-r--  1 user user         9 Июн  2 11:53 a2.sh

i:~$ cat  q1.sh
echo sadf
:~$ cat  a1.sh
echo 123
:~$ cat  a2.sh
echo 234

:~$ for each in ./a*.sh ; do bash $each ; done
123
234

OU você pode usar um utilitário de linha de comando chamado run-parts. Essa ferramenta pode descobrir automaticamente vários scripts ou programas em um diretório e executá-los todos.

Por exemplo, para executar todos os scripts em / etc cujos nomes começam com 'a' e terminam com '.sh':

$ run-parts --regex '^a.*\.sh$' /etc

Com a opção "--test", você pode imprimir os nomes dos scripts que seriam executados, sem executá-los. Isso é útil para fins de teste

$ run-parts --test ./my_script_directory
    
por 02.06.2016 / 10:58
3
find . -maxdepth 1 -type f -perm /111 -name 'a*' -exec {} \;

ou

find . -maxdepth 1 -type f -executable -name 'a*' -exec {} \;

Qualquer uma dessas opções encontrará todos os nomes de arquivos que começam com a no diretório atual (mas não subdiretórios) com o proprietário, grupo ou outro (s) bit (s) de execução definidos e tentam executá-los.

Eu digo "try" porque a tentativa pode falhar, por exemplo, se apenas os bits de execução do proprietário e do grupo forem definidos E você não for o proprietário nem o membro do grupo. Nesse caso, você não teria permissão para executar o arquivo.

Outro modo de falha possível é que ele só pode executar scripts que podem ser interpretados pelo seu shell atual. então, um script awk ou perl etc começando com a não será executado - ele falhará com erros de sintaxe porque eles não são scripts de shell.

Outro método é:

for f in ./a* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done

Isso executará qualquer coisa que comece com a e que seja executável por você (e NÃO seja um diretório), independentemente do tipo de executável - shell script, awk script, perl script, binário, etc.

    
por 02.06.2016 / 12:44
0

Você pode tentar isso -

for i in a*; do file "$i"|grep -q 'script' && ./"$i"; done

Explicação -

  1. for i ... - Este é um loop for que itera todos os itens que começam com.
  2. O comando file "$i"|grep ... arquivo exibe o tipo do arquivo. Isso é necessário porque pode haver outros arquivos ou diretórios começando com 'a'. O grep procura a palavra ' script ' na saída do arquivo
  3. && ./"$i" ... Se a pesquisa por grep for bem sucedida, ele executa o script.
por 02.06.2016 / 10:43