terça-feira, 30 de março de 2010

Tutorial: Script para criar uma pasta específica em todas as pastas de usuário /home

Ontem um amigo aqui do Gene que está dando um curso de banco de dados, precisava criar uma pasta chamada firebird em cada pasta de usuário. Dava mais ou menos umas 50 pastas. Ele ia fazer na mão coitado, daí fiz um script pra ele e funcionou, ele ficou feliz da vida.

Resolvi compartilhar com os leitores do blog. Espero que seja útil.  

Tutorial

Primeiramente precisamos obter todas as pastas de /home. Esta é a parte mais fácil, um comando ls resolve. Mas como percorrer estas pastas? Para isso podemos usar o comando for. Fica mais ou menos assim:
cd /home
for $arquivo in $(ls) 
do
done
 Em cada iteração do loop a variável arquivo é alimentada com o arquivo corrente. Agora precisamos saber se esse arquivo é realmente um diretório. Para isso podemos usar o comando test, assim:
if test -d $aquivo 
then
   
fi
A opção -d do comando test verifica se determinado arquivo é um diretório. Com isso conseguimos fazer o nosso script, que fica assim:

cd /home
for numero in $(ls) do
  if test -d $numero
  then
    mkdir $numero/firebird
    chown firebird $numero/firebird echo "Criado diretorio: $numero/firebird com permissão para firebird"
  fi
done

Legal né? E se a pasta firebird já existir em algum diretório? Blz, podemos resolver adicionando mais um if, assim:
cd /home
for numero in $(ls)
do
    if test -d $numero
    then
       if test ! -d $numero/firebird
       then
          mkdir $numero/firebird
          chown firebird $numero/firebird
          echo "Criado diretorio: $numero/firebird com permissão para firebird"
       fi
    fi
done
O ! no comando test serve como negação, o comando -d além de verificar se é um diretório serve pra gente saber se o diretório realmente existe. Bom essa foi a dica. Espero ter ajudado! T+

Um comentário:

Unknown disse...

oi
talvez queira dizer
---
cd /home
for arquivo in $(ls)
do
done
---
arquivo e não $arquivo

e talvez ainda:
---
cd /home
for arquivo in *
do
done
---