Como roteirizar a verificação do Subversion?

1

Partindo dessa pergunta , estou tentando escrever um script bash que reciclará dois diretórios do diretório contendo meus repositórios do subversion, verificando se os diretórios são repositórios. Haverá uma mistura de diretórios e repositórios, e alguns repositórios escondidos nesses subdiretórios.

Quaisquer repositórios do Subversion descobertos devem ter seu nome impresso em um arquivo de saída, seguido pela saída de svnadmin verify .

Eu tenho o seguinte snippet para verificar se um diretório é um repositório:

svnlook info /path/to/repo >/dev/null

Então estou jogando fora a saída svnlook , um código de retorno 0 indica que é de fato um repositório SVN. Eu poderia usar esse trecho, em uma instrução if para executar svnadmin verify se 0 for retornado.

Eu tentei:

find /dir/containing/repos -maxdepth 2 -type d -exec bash -c 'if [ "svnlook info {} >/dev/null" = 0 ] ;then ;echo "{}" >>output.txt ;svnadmin verify "{}" >>output.txt ;fi' \;

Embora eu receba o seguinte aviso para cada diretório encontrado:

bash: -c: -line 0: syntax error near unexpected token ';'

Eu acho que estou tentando desnecessariamente empinar tudo em um comando find , o que eu estou errando de qualquer maneira. Qual seria a melhor maneira de estruturar essa tarefa?

    
por Arronical 23.07.2015 / 12:15

1 resposta

1

Você não precisa de ; após then em then ;echo "{}" >>output.txt .

Uso:

then echo "{}" >>output.txt

Observe também que, em vez de tocar com {} , use os parâmetros posicionais do shell (não estou familiarizado com svn , por isso confie em seus comandos):

find /dir/containing/repos -maxdepth 2 -type d -exec bash -c 'if svnlook info /path/to/repo >/dev/null ;then echo "" >>output.txt ;svnadmin verify "" >>output.txt ;fi' _ {} \;
  • if svnlook info /path/to/repo >/dev/null executará o comando e redirecionará o STDOUT para /dev/null

  • Se o comando svnlook info /path/to/repo for bem-sucedido (código de saída 0), os comandos echo "" >>output.txt ;svnadmin verify "" >>output.txt serão executados

  • Aqui estamos usando os nomes dos diretórios {} como o primeiro argumento ( ) a ser processado pelo shell.

  • _ aqui é apenas um espaço reservado indicando o parâmetro posicional 0, pois bash -c command começa a considerar qualquer argumento adicional após o command a partir de 0. Como _ é o argumento zero, podemos usar {} como o primeiro argumento. Verifique man bash para ter mais ideia.

por heemayl 23.07.2015 / 12:24