cd para um diretório nome-desconhecido em um caminho conhecido

2

Estou tentando automatizar a implantação de um webapp em desenvolvimento que é atualizado com freqüência. A webapp vem na forma de um arquivo zip com nome desconhecido e essa estrutura de diretórios:

unknown_name.zip
  └── unknown_folder_name
     └──all_the_application_files

Eu preciso de um script bash para:

  • remover todo o conteúdo de / var / www / [done]
  • descompacte o arquivo unknown_name.zip, em um determinado caminho tmp [done]
  • cd dentro desse caminho tmp conhecido [concluído]
  • cd dentro de unknown_folder_name extraído de unknown_name.zip
  • mova all_the_application_files para / var / www [fácil se resolvermos o marcador anterior]

Importante: dentro do diretório tmp, haverá apenas um diretório, o que eu quero entrar. Meu script atual:

rm -r /var/www/*
unzip ./\*.zip \* -d /home/lese/tmp-deploy
cd /home/lese/tmp-deploy
# HERE I WOULD cd unknown_folder_name
mv * /var/www/
    
por lese 25.04.2014 / 15:30

1 resposta

9

Solução

Se você tiver certeza de que há exatamente um diretório e mais nada (nenhuma outra pasta e nenhum outro arquivo) no diretório atual, você pode entrar nesse diretório com

cd *

Se você sabe que há apenas um diretório, mas pode haver arquivos não-diretório e não-symlink-to-directory no diretório atual, você pode usar

cd */.

para selecionar apenas o diretório.

Explicação

Um único * é expandido pelo shell para uma lista de todos os nomes de arquivos (que inclui subdiretórios) no diretório atual (excluindo os arquivos ocultos, especialmente os diretórios . e .. , que estão sempre lá). Se a única coisa no diretório atual for o subdiretório para entrar, isso será expandido para

cd unknown_folder_name

e, portanto, faça o que quiser.

O truque com */. é que isso se expande para o "diretório auto" (denominado . ) em qualquer subdiretório, que é o próprio subdiretório. Como os nomes dos arquivos nunca podem conter um / , e supondo que haja apenas um diretório, o único nome que ele expande será unknown_folder_name/. , que é obviamente o mesmo diretório que unknown_folder_name .

    
por 25.04.2014 / 15:41