Exclude folder using `find` command

6

I'm using the find command on a Mac to search for a folder called test1. Now test1 folder could be present in the .Trash folder also. How do I exclude the .Trash folder from getting reported in search results or basically any folder I wish to exclude?

$ find $HOME  -name test1 -type d
/Users/theuser/.Trash/test1
/Users/theuser/test1 
/Users/theuser/Downloads/test1 

I want the result to be just

/Users/theuser/test1
/Users/theuser/Downloads/test1 

I used grep:

find $HOME  -name test1 -type d | grep -v '.Trash' 

to filter out the .Trash result, but I'm interested in knowing if using find alone achieves the same results.

smokinguns

Posted 2011-05-12T22:47:10.577

Reputation: 1 188

Answers

10

find $HOME -path  $HOME/.Trash -prune -o -name test1 -type d -print

By explicitly using -print you avoid the spurious printing of .Trash.

herrtodd

Posted 2011-05-12T22:47:10.577

Reputation: 716

0

Use the -prune primary:

find $HOME -name .Trash -prune -o -name test1 -type d

Edit:

That will include .Trash in the output. To fix that:

find $HOME -name .Trash -prune -o \( -name test -type d -print \)

garyjohn

Posted 2011-05-12T22:47:10.577

Reputation: 29 085

Using -name will also excluded results in directories named .Trash which are not in the root of the user's home directory. – herrtodd – 2011-05-12T23:18:39.033

True. I went with smokingun's use of grep -v '.Trash' (should be '\.Trash') as an indication that .Trash might appear elsewhere. I think yours is the better answer, though. – garyjohn – 2011-05-12T23:25:03.423