Как написать сценарий проверки Подверсии?

Вовлекая от этого вопроса, я пытаюсь записать сценарий удара, который рекурсивно вызовет два каталога из каталога, содержащего мои репозитории подверсии, проверяя, являются ли каталоги репозиториями. Будет соединение каталогов и репозиториев и некоторого repos, скрывающегося в тех поддиректорах.

Любой Подверсии repos обнаруженный нужно распечатать их имя к выходному файлу, сопровождаемому выводом svnadmin verify.

У меня есть следующий отрывок, чтобы проверить, является ли каталог репозиторием:

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

Таким образом, я выбрасываю svnlook вывод, код возврата 0 указывает, что это - действительно SVN repo. Я мог использовать этот отрывок, в if оператор для выполнения svnadmin verify если 0 возвращается.

Я попробовал:

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' \;

Хотя я получаю соблюдающее предупреждение для каждого найденного каталога:

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

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

1
задан 13 April 2017 в 15:23

1 ответ

Вам не нужно ; после then в then ;echo "{}" >>output.txt.

Использование:

then echo "{}" >>output.txt

Также отметьте это вместо того, чтобы играть с {} используйте позиционные параметры оболочки (я не знаком с svn так полагаясь на Ваши команды):

find /dir/containing/repos -maxdepth 2 -type d -exec bash -c 'if svnlook info /path/to/repo >/dev/null ;then echo "$1" >>output.txt ;svnadmin verify "$1" >>output.txt ;fi' _ {} \;
  • if svnlook info /path/to/repo >/dev/null выполнит команду и перенаправит STDOUT к /dev/null

  • Если svnlook info /path/to/repo команда успешна (код выхода 0), затем echo "$1" >>output.txt ;svnadmin verify "$1" >>output.txt команды будут выполнены

  • Здесь мы используем имена каталогов {} как аргумент кулака ($1) быть обработанным оболочкой.

  • _ вот просто заполнитель, указывающий на позиционный параметр 0 как bash -c command начинает рассматривать дальнейший аргумент после command запуск от 0. Как _ нулевой аргумент, мы можем использовать {} как первый аргумент. Проверить man bash получить больше идеи.

1
ответ дан 7 December 2019 в 16:13

Другие вопросы по тегам:

Похожие вопросы: