alt*_*ern 4 unix svn bash find
我怎样才能使用find
unix实用程序查找机器上的所有工作副本?例如,我可以使用find / -name .svn -type d
命令,但它输出所有冗余结果(很多子文件夹),而我只需要显示工作副本的父目录.
有相关的问题,但它在我的情况下并没有真正帮助:我如何找到给定的subversion工作副本的根文件夹
更新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)
也许是这样的?
#!/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),带斜线..但以这种形式对我的作品,叫上一些目录时无拖尾削减).