[SLL] find insanity

Russell Evans russell-evans at qwest.net
Fri May 27 12:55:48 PDT 2005


On Thu, 26 May 2005 19:04:12 -0700 (PDT)
"Andrew Sweger" <andrew at sweger.net> wrote:

> Here's the solution using
> Perl's File::Find (only the wanted() code is shown),
> 
> sub wanted {
>     my ($dev,$ino,$mode,$nlink,$uid,$gid);
> 
>     (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
>     -d _ &&
>     -d "$File::Find::name/.svn" &&
>     print("$File::Find::name\n") &&
>     ($File::Find::prune = 1);
> }
> 
> In other words, find me directories that contain a sub-directory named
> ".svn", print the directory name, and prune further exploration in
> this sub-tree. I don't think find would do this (short of forking a
> helper on each directory found). 

Using an example directory structure posted to the list by
Paul <paul at oz.net>

revans at linux:~> find ~/projects 
/home/revans/projects
/home/revans/projects/CVS
/home/revans/projects/CVS/1
/home/revans/projects/bar
/home/revans/projects/bar/baz
/home/revans/projects/bar/baz/.svn
/home/revans/projects/bar/baz/.svn/3
/home/revans/projects/foo
/home/revans/projects/.svn
/home/revans/projects/.svn/2
/home/revans/projects/.svn/.svn

revans at linux:~> find ~/projects -type d -name .svn
/home/revans/projects/bar/baz/.svn
/home/revans/projects/.svn
/home/revans/projects/.svn/.svn

revans at linux:~> find ~/projects -type d -name .svn -prune
/home/revans/projects/bar/baz/.svn
/home/revans/projects/.svn

If by "find me directories that contain a sub-directory named
".svn", print the directory name" you what "/home/revans/projects"
when /home/revans/projects/.svn is found then 

for i in `find ~/projects -type d -name .svn -prune` ; do 
  echo ${i%/*} 
done

revans at linux:~> for i in `find ~/projects -type d -name .svn -prune` ;
do echo ${i%/*} ; done 
/home/revans/projects/bar/baz
/home/revans/projects

Is this what you where looking for?    

Thank you
Russell



More information about the linux-list mailing list