Faz um loop por todas as pastas e executa o script

6

Eu tenho um script bash install.sh no meu diretório atual e eu tenho um diretório apps que contém vários diretórios. Eu quero fazer um loop através destes subdiretórios na pasta app e executar algum script. Depois de executar o script na primeira pasta, ele deve voltar e entrar na próxima pasta. Eu tentei isso, mas está pulando um após o outro. Quero dizer, ele está entrando em todas as pastas ímpares e não entrando em pastas mesmo.

Código em install.sh

for f in apps/*;
  do 
     [ -d $f ] && cd "$f" && echo Entering into $f and installing packages
     cd ..
  done; 
    
por devo 02.10.2014 / 19:10

2 respostas

8

Use o caminho completo do seu diretório pai (no meu caso apps diretório localizado no meu diretório home) e remova um comando extra ( cd .. )

for f in ~/apps/*;
  do 
     [ -d $f ] && cd "$f" && echo Entering into $f and installing packages
  done;

Veja a captura de tela: com o comando cd .. e usando apps/*

Veja a captura de tela: sem o comando cd .. e usando ~/apps/*

    
por αғsнιη 02.10.2014 / 19:26
1

Você pode usar find junto com exec para essa proposta. Seu install.sh deve ser

#!/bin/bash
find ./apps -type d -exec echo Entering into {} and installing packages \; 

substitua o texto após -exec pelo seu comando

por exemplo

#!/bin/bash
find ./apps -type d -exec touch {}/test.txt  \;  

Ele percorrerá o app e todos os seus subdiretórios e criará um arquivo text.txt

    
por g_p 02.10.2014 / 19:34