Combinando múltiplas funções em um único script bash

0

Existe uma maneira de combinar os seguintes comandos (o último é uma função zsh) em um único script bash?

  • find /path/to/directory/*/* ! -name "*.js" -type f -delete
  • find /path/to/directory/*/* ! -name "*jquery*" -type f -delete
  • find /path/to/directory/*/* ! -name "*jquery*" -type d -delete
  • for dir (/path/to/directory/*(/)) rm -f $dir/*.js(OL[2,-1])
por user334455 01.08.2014 / 17:29

1 resposta

2

Se você quiser simplesmente escrever um script que execute os comandos um após o outro, você tem duas opções reais:

  1. Escreva um script bash e, para o último comando, invoque zsh para executá-lo (um shell invoca outro shell).
  2. Escreva um script zsh que, por sua vez, executa os quatro comandos, esquecendo-se do bash.

Embora o bash seja um shell muito comum no Linux, não há nada mágico sobre o bash como tal. Você pode facilmente escrever um script zsh em vez disso; a linha #! no início diz qual programa deve ser usado para executar o script.

Portanto, se você quiser ir com a opção 2 acima (o que eu provavelmente faria), basta fazer um arquivo de texto simples que comece com #!/bin/zsh (ou onde quer que zsh esteja no seu sistema), e seja seguido pelo comandos. Você teria algo muito parecido com isto:

#!/bin/zsh
find /path/to/directory/*/* ! -name "*.js" -type f -delete
find /path/to/directory/*/* ! -name "*jquery*" -type f -delete
find /path/to/directory/*/* ! -name "*jquery*" -type d -delete
for dir (/path/to/directory/*(/)) rm -f $dir/*.js(OL[2,-1])

Não deveria haver mais do que isso. Nota: dependendo das idiossincrasias do zsh, você pode ou não precisar usar um pouco mais de citação. Eu prefiro sempre colocar "aspas" em torno de variáveis que estão sendo expandidas a menos que eu seja positivo que não seja necessário (e mesmo assim, muitas vezes), apenas no caso.

    
por 01.08.2014 / 17:45