я выполняю следующую команду: -find / -type f -name fs-type -exec svnlook tree {} \; | egrep "/ $"
результат svnlook: не удается открыть файл '/ var / lib / svn / repos / b1me / products / payone / generic / code / core / db / fs-type / format': не каталог svnlook: не удается открыть файл '/ var / lib / svn / repos / b1me / products / payone / generic / code / сборы / db / fs-type / format': не каталог
возможно, мы должны сделать так, чтобы команда "find" давала нам путь без "db / fs-type / format" другими словами, мы должны вырезать вывод "команды find" .... но как я могу это сделать ???
Здесь виновата не команда find. Команда find делает именно то, что вы ей говорите, например он находит все вхождения регулярного файла с именем fs-type
во всей вашей файловой системе.
Затем вы передаете результаты команды find в svnlook tree
.
В svnlook tree
Команда ожидает каталог, так как это параметр, а не обычный файл, как вы ей. Каталог, в который вы переходите svnlook tree
должен иметь файл с именем format
который содержит номер версии репозитория, поэтому вы получаете сообщение об ошибке выше.
Это svnlook
команда, которая выдает вам сообщение об ошибке, которое вы видите. Что вам нужно сделать, так это выяснить, какой каталог в пути /var/lib/svn/repos/
правильный переход к svnlook
.
Вы также можете помочь себе, прочитав некоторую информацию о svn чтобы лучше понять систему, с которой вы работаете.
РЕДАКТИРОВАТЬ
Нет простого способа найти все репозитории svn
Вы можете найти все каталоги .svn в системе и запустить svn info
на них затем проверьте вывод на "Repository Root:
". Если у вас есть много проектов в общем репозитории, то выходные данные нужно будет передать через uniq, таким образом
sudo find / -name .svn -exec dirname {} \; | \
xargs svn info | grep "Repository Root:" | uniq \
sed 's/Repository Root: file:\/\///'
Вы получите что-то вроде /var/svn/repos
как выход.
Выше перечислены все репозитории для проектов, разбросанных по вашей файловой системе. Тогда ты можешь
svnlook tree /var/svn/repos |grep /
чтобы найти то, что вы хотите для каждого репозитория, указанного в выходных данных приведенной выше команды.
Единственная проблема с описанным выше методом заключается в том, что если дерево каталогов было удалено, и оно содержало проект под управлением svn, а проект находился в уникальном репозитории, вы его не найдете.
Насколько я понимаю, вы хотите пропустить каталог в своих результатах.
Вы можете сделать это с помощью -path <path_to_skip> -prune
параметры
Вы можете использовать параметр "-path" с шаблоном, который вам нравится