26

Я пытаюсь автоматизировать svnadmin dump для сценария резервного копирования, и я хочу сделать что-то вроде этого:

find /var/svn/* \( ! -name dir -prune \) -type d -exec svnadmin dump {} > {}.svn \;

Кажется, это работает, поскольку он просматривает каждый репозиторий svn в /var/svn и запускает svnadmin dump .

Однако вторая {} в команде exec не заменяет имя обрабатываемого каталога. В основном это просто один файл с именем {}.svn .

Я подозреваю, что это потому, что оболочка интерпретирует > для завершения команды find и пытается перенаправить стандартный вывод из этой команды в файл с именем {}.svn .

Есть идеи?

2 ответа2

36

Вы можете сделать перенаправление следующим образом:

find /var/svn/* \( ! -name dir -prune \) -type d -exec sh -c 'svnadmin dump {} > {}.svn' \;

и правильная замена будет сделана.

5

Нет, однако вы можете написать простой bash-скрипт для этого и затем вызвать его из find.
Пример (/tmp/dump.sh):

#!/bin/sh
svn admin dump "$1" > "$1".svn

затем:

find /var/svn/* \( ! -name dir -prune \) -type d -exec sh /tmp/dump.sh '{}' \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .