shell comandos para verificar e criar dir

2

Eu estou escrevendo um script Ruby dentro do qual eu gostaria de invocar / executar alguns comandos shell .

Os comandos do shell que gostaria de executar devem verificar se existe um diretório chamado ' tmp ' em /var/lib/mysql/ ou não.

  • se existir, remova todos os arquivos (incluindo sub-dirs & arquivos) dentro de /var/lib/mysql/tmp/ .

  • Se não existir, basta criá-lo.

( P.S. apenas usuário root pode acessar /var/lib/mysql/ )

Eu sei que mkdir criará o diretório, mas não tenho certeza como fazer um comando para verificar se o diretório existe ou não .

Como um todo, eu gostaria de ter alguns comandos shell para alcançar o cenário descrito acima, e a maneira mais elegante, melhor , já que eu rodaria os comandos do shell em um script ruby. / p>

Alguém pode me ajudar?

    
por Mellon 29.11.2011 / 14:07

3 respostas

3

é

 [ -d /var/lib/mysql/tmp ] || mkdir /var/lib/mysql/tmp

o que você está procurando? Veja man test para detalhes.

Ou para alcançar seus objetivos:

 _DIR=/var/lib/mysql/tmp
 [ -d ${_DIR} ] && rm -rf ${_DIR}
 mkdir ${_DIR}
    
por 29.11.2011 / 14:13
2

Os dois comandos shell a seguir farão o seguinte:

mkdir -p  /var/lib/mysql/tmp/    # create directories (that don't exist, yet)
rm    -rf /var/lib/mysql/tmp/*   # delete all files and sub-directories

Observação: você pode precisar preceder cada linha com sudo para permitir que seu script Ruby seja carregado os comandos shell com privilégios de root. No entanto, pode ser complicado configurar o sudo corretamente.


A opção -p para mkdir elimina a necessidade para testar a existência de um diretório:

-p        Create intermediate directories as required.  If this option is
          not specified, the full path prefix of each operand must already
          exist.  On the other hand, with this option specified, no error
          will be reported if a directory given as an operand already
          exists.  Intermediate directories are created with permission
          bits of ''rwxrwxrwx'' (0777) as modified by the current umask,
          plus write and search permission for the owner.
    
por 29.11.2011 / 15:21
1

Você poderia usar

test -d /var/lib/mysql/tmp && rm -rf /var/lib/mysql/tmp/* || mkdir /var/lib/mysql/tmp

mas sugiro que você use os próprios recursos internos do ruby para verificar se o diretório existe e, em seguida, chame rm … ou mkdir … dependendo do resultado do teste.

    
por 29.11.2011 / 14:18