посетить все каталоги под управлением версий

Есть ли find для find , которая позволила бы мне посетить все каталоги под управлением SVN? Я пытаюсь использовать ключ execdir для добавления в свойство svn:ignore в каждом из этих каталогов. Что-то вроде:

 find . -type d -execdir svn propset svn:ignore -F <((svn propget svn:ignore; echo "new ignore pattern") | sort -u) .' \; 

но я не могу ограничить find только каталогами SVN.

С более старыми версиями svn где у вас был каталог .svn в каждом каталоге под контролем версий, вы могли бы сделать:

 find . -name .svn -type d -prune -execdir bash -c ' cd -P .. && propset svn:ignore -F <( (svn propget svn:ignore; echo "new ignore pattern") | sort -u) .' bash {} \; 

С более новыми, где у вас есть только один .svn и .svn db:

 find . -path '*/.svn/wc.db' -execdir bash -c ' cd -P .. && sqlite3 .svn/wc.db "select local_relpath from NODES where kind == \"dir\"" | while IFS= read -r dir; do [ -d "$dir" ] && propset svn:ignore -F <( (svn propget svn:ignore "$dir"; echo "new ignore pattern") | sort -u ) "$dir" done' bash {} \; 

В конце концов, я использовал следующий скрипт. Папка .svn должна быть явно исключена, так как svn info .svn имеет код выхода 0 и смущает скрипт.

 #!/usr/bin/env bash if [ $# -ne 1 ] then echo "usage is $0 <new ignore pattern>" else PATTERN=$1 for d in $(find . ! -name ".svn" -type d) do svn info "$d" &> /dev/null if [ $? -eq 0 ] then svn -q propset svn:ignore -F <((svn propget svn:ignore ; echo "$PATTERN") | sort -u) "$d" fi done fi