Script Bash - encontre o diretório e faça algo nele. Ou encontre um arquivo e faça algo com ele

1

Isso é o que eu tenho até agora:

for f in 'svn ls repository_dir'; 
do 
svn checkout repository_dir/$f/trunk/dir1/dir2/dir3/dir4/needed_dir 
done

Isso funciona muito bem para os projetos (100 deles) que têm o needed_dir no lugar correto. Mas alguns projetos ($ f) têm sua estrutura de diretórios um pouco diferente. Então, "needed_dir" pode estar em um local diferente.

No do loop , como posso dizer ao meu script bash para:

"Encontre" needed_dir ". Se encontrado, confira."

Ou

"Encontre" arquivo_necessário.txt ". Se encontrado, confira."

Obrigado por qualquer ajuda

    
por user1776193 26.03.2013 / 05:01

2 respostas

1

Isso provavelmente será mais fácil com encontrado .

Para executar svn checkout ou todo diretório denominado needed_dir na árvore de diretórios de repository_dir/$f/trunk , use este comando:

find repository_dir/$f/trunk/ -type d -name needed_dir -exec svn checkout {} \;

Encontre substitutos {} com o nome do diretório encontrado.

O interruptor -type d só encontra diretórios, enquanto -type f encontra apenas arquivos.

    
por 26.03.2013 / 05:09
0

Desculpe, não tenho reputação suficiente para comentar, então tenho que criar uma nova resposta.

O comando find não funcionará aqui porque ele pode pesquisar apenas um diretório no disco. (Então, isso só funcionaria se você primeiro svn checkout a totalidade de "repository_dir".)

Veja o seguinte link no StackOverflow para obter informações semelhantes. questão. Algo parecido com a resposta dada é mais apropriado:

for f in 'svn ls -R repository_dir | grep "needed_dir"'; 
do 
svn checkout repository_dir/$f
done

A opção -R para o svn faz o svn listar tudo no URL recursivamente. O grep procura o diretório que você precisa.

Para o que vale a pena, você pode tornar isso um pouco mais curto usando o comando xargs em vez de um loop for.

svn list -R <URL> | grep "needed_dir" | xargs --max-args=1 -I'{}' svn co <URL>'{}'

O Xargs executa "svn co (caminho-na-url)" para cada palavra delimitada por espaços em branco descoberta por svn list e grep. (O estranho -I '{}' é necessário, caso contrário, xargs coloca um espaço entre a URL e o nome do subdiretório.)

    
por 26.03.2013 / 17:53