1

Это то, что я до сих пор:

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

Это прекрасно работает для проектов (из них 100), в которых нужный_каталог находится в правильном месте. Но у некоторых проектов ($ f) структура каталогов немного отличается. Таким образом, "required_dir" может быть в другом месте.

В цикле do, как я могу сказать моему bash-скрипту:

"Найти" нужный_директор ". Если нашли, проверьте это. "

Или же

Msgstr "Найти" Нужный_файл.txt ". Если нашли, проверьте это. "

Спасибо за любую помощь

2 ответа2

1

Это будет легче всего найти.

Чтобы выполнить svn checkout или каждый каталог с именем needed_dir в дереве каталогов repository_dir/$f/trunk , используйте эту команду:

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

Найти заменители {} с именем найденного каталога.

-type d находит только каталоги, а -type f находит только файлы.

0

Извините, у меня недостаточно репутации, чтобы комментировать, поэтому мне нужно создать новый ответ.

Команда find не будет работать здесь, потому что она может искать только каталог на диске. (Так что это будет работать, только если вы сначала извлечете svn полностью из "repository_dir".)

Смотрите следующую ссылку на StackOverflow для аналогичного вопроса. Что-то похожее на ответ, данный там, более уместно:

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

Опция -R для svn заставляет svn перечислять все по URL рекурсивно. Grep ищет каталог, который вам нужен.

Что бы это ни стоило, вы можете сделать это несколько более кратким, используя команду xargs вместо цикла for.

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

Xargs запускает «svn co (path-in-url)» для каждого слова с пробелом, обнаруженного с помощью svn list и grep. (Странный -I '{}' необходим, иначе xargs ставит пробел между URL-адресом и именем подкаталога.)

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