Você pode fazer o redirecionamento assim:
find /var/svn/* \( ! -name dir -prune \) -type d -exec sh -c 'svnadmin dump {} > {}.svn' \;
e a substituição correta será feita.
Estou tentando automatizar um comando svnadmin dump
para um script de backup e quero fazer algo assim:
find /var/svn/* \( ! -name dir -prune \) -type d -exec svnadmin dump {} > {}.svn \;
Isso parece funcionar, pois ele verifica cada repositório svn em /var/svn
e executa svnadmin dump
nele.
No entanto, o segundo {}
no comando exec não é substituído pelo nome do diretório que está sendo processado. Basicamente resulta apenas em um único arquivo chamado {}.svn
.
Eu suspeito que isso ocorra porque o shell interpreta >
para finalizar o comando find
e tenta redirecionar o stdout desse comando para o arquivo denominado {}.svn
.
Alguma idéia?
Não, no entanto, você pode escrever um script bash simples para fazer isso e chamá-lo de find.
Exemplo ( /tmp/dump.sh ):
#!/bin/sh
svn admin dump "$1" > "$1".svn
então:
find /var/svn/* \( ! -name dir -prune \) -type d -exec sh /tmp/dump.sh '{}' \;
Tags find linux redirection