在机器上找到所有subversion工作副本

alt*_*ern 4 unix svn bash find

我怎样才能使用findunix实用程序查找机器上的所有工作副本?例如,我可以使用find / -name .svn -type d命令,但它输出所有冗余结果(很多子文件夹),而我只需要显示工作副本的父目录.

有相关的问题,但它在我的情况下并没有真正帮助:我如何找到给定的subversion工作副本的根文件夹

Ale*_*own 6

更新3 - 查找的排序输出以确保.svn出现在隐藏文件之前.对于签入的隐藏目录,仍然可能会失败.


Perl可以为您删除嵌套路径:

find -s . -ipath *.svn | perl -lne's!/\.svn$!!i;$a&&/^$a/||print$a=$_'
Run Code Online (Sandbox Code Playgroud)

在人类中,这表示:对于每个svn路径,忽略该/.svn部分,如果当前路径是我打印的最后一个路径的子路径,则不要打印它.

示例:对于目录结构:

$ find .
.
./1
./1/.svn
./1/1
./1/1/.svn
./2
./2/.svn
./3
Run Code Online (Sandbox Code Playgroud)

这收益率

./1
./2
Run Code Online (Sandbox Code Playgroud)


par*_*err 5

也许是这样的?

#!/bin/bash
if [ -d "$1/.svn" ]; then
        echo $1
else
        for d in $1/*
        do
                if [ -d "$d" ]; then
                        ( $0 $d )
                fi;
        done
fi;
Run Code Online (Sandbox Code Playgroud)

它命名,例如- find_svn.sh,使其可执行文件,并调用一样./find_svn.sh /var/www(可能需要一些调整,以标准化的目录名(S),带斜线..但以这种形式对我的作品,叫上一些目录时无拖尾削减).