How to use -path and -prune with find


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to use -path and -prune with find
# 1  
Old 10-23-2009
How to use -path and -prune with find

OK, I'm trying search and destroy tabs again.

This time I'm having trouble excluding certain directories from my search.

Here is what I have tried and it is not ignoring the top level build directory:

Code:
find . -path ./build -prune -name \*.java -o -print | xargs grep -i ' '

I don't understand the -o and -print either. Don't they default to printing them all the time? They seem to be necessary when I was experimenting with using -regex instead of -name.

Thanks,
Siegfried
# 2  
Old 10-23-2009
Hi siegried, find is ignoring the contents of the directory build, but still reporting the empty directory. So the pruning works. It is just that is you pass it as a parameter to grep -i then it will still grep in all the files in that directory ...

You could try:
Code:
find !(build) -name \*.java | xargs grep -i ' '

( tab character between quotes lost in translation )
# 3  
Old 10-23-2009
Under /home/brad/runksh I have a file called test.funcs
under /home/brad/runksh/lib I have a file called runksh.funcs
under /home/brad/scratch I have sc.funcs: -

Code:
 
/home/brad/runksh ls -l
-rwxr-xr-x 1 brad root 12887 2009-03-08 18:22 lib/runksh.funcs
-rw-r--r-- 1 brad root 0 2009-10-23 22:04 scratch/sc.funcs
-rw-r--r-- 1 brad root 0 2009-10-23 21:51 test.funcs


To exclude lib: -

Code:
 
TX5XN:/home/brad/runksh>find . \( -name lib -type d -prune \) -o -name \*.funcs -print 
./test.funcs
./scratch/sc.funcs

You do need the print although I don't know why: -

Code:
 
TX5XN:/home/brad/runksh>find . \( -name lib -type d -prune \) -o -name \*.funcs 
./test.funcs
./lib
./scratch/sc.funcs

# 4  
Old 10-27-2009
Mutliple directories?

OK, that helps!

Now (I'm just curious) how do I exclude multiple directories using the !(build) syntax?

This is mostly working except it does not exclude "build.xml"!

Code:
find . \( -name build -type d -prune \) -o \( -path ./.metadata -type d -prune  \) -o \( -name apollo\* -type d -prune  \) -o \( -name env -type d -prune  \) -o -name \*.xml -o -name \*.java -o \( -name build.xml -prune \)  |  xargs grep -n "	"

Here I am trying to exclude the top level directory called "build" as well as the multiple files inside ./src named build.xml.

Thanks,
Siegfried
# 5  
Old 10-27-2009
I have never tried the !(build) syntax so would not mind playing around with it.

It would help if you actually posted a cut down ls -l output of the directory structure you are talking about rather than giving a verbal description. That way people can replicate it and try things out.
# 6  
Old 10-27-2009
Just to clarify: the !(build) syntax is not part of the find command but it is a pattern marching operator that tells the shell to expand anything but the build directory and pass that the result on to find.
# 7  
Old 10-27-2009
That's really interesting, Thanks!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

find . -path "*_nobackup*" -prune -iname "*.PDF" \( ! -name "*_nobackup.*" \)

These three finds worked as expected: $ find . -iname "*.PDF" $ find . -iname "*.PDF" \( ! -name "*_nobackup.*" \) $ find . -path "*_nobackup*" -prune -iname "*.PDF" They all returned the match: ./folder/file.pdf :b: This find returned no matches: $ find . -path "*_nobackup*" -prune... (3 Replies)
Discussion started by: wolfv
3 Replies

2. Shell Programming and Scripting

Using prune with find

Hi, I have two files under two separate directories as in: find . -name test.sh ./test.sh ./abc/test.sh I want my find to only look for the file test.sh that is under the current directory and not one under /abc How do I use prune to achieve this? I am on AIX (3 Replies)
Discussion started by: swasid
3 Replies

3. Solaris

Usage of -prune and -name in find

I am into cd /home/work/amey/history-*/ Under amey I have directories history, history-1, history-2 and under history-2 I have got 2 files 3 and 2. When I run the find command I get the below o/p. find /home/work/amey/history-*/. -name . -o -prune -type f /home/work/amey/history-1/.... (1 Reply)
Discussion started by: ameyrk
1 Replies

4. Shell Programming and Scripting

find: -prune and -name options

I am trying to find all .rhosts files on some unix systems. I tried just -name ".rhosts" but we have a lot of really large NFS and MVFS systems that I do not want to crawl and I am having a hard time excluding them. I also need to scan more than just /root /home and /users, so I really need to scan... (1 Reply)
Discussion started by: nitrobass24
1 Replies

5. UNIX for Dummies Questions & Answers

Find with Prune not working

Hi I am trying to list all files in every subdirectory from a given location. However, I realise that 1 folder will have files that I am not interested in. This is using a .csh file to execute I have tried different scripts but to no avail. My current incarnation is below. Would someone be... (4 Replies)
Discussion started by: wonderbison
4 Replies

6. UNIX for Dummies Questions & Answers

Find prune Trash

How do I run a find without is looking in ./Trash gregg@gregg-desktop:/media/Audio$ find . -type f ! -name '*.jpg' -size 1M -print |head find: `./.Trash-1000/expunged/2781324553/mp3-to-m4b-batch': Input/output error find:... (0 Replies)
Discussion started by: glev2005
0 Replies

7. Shell Programming and Scripting

Find + prune + mtime

Hi, i try to catch all files in a dir ,without going down in subdir , which don't have file extension and older than 10 days for example: my dir : drwxr-xr-x 7 notes01 notes 4096 Mar 8 14:11 . drwxr-xr-x 116 root system 4096 Mar 9 11:17 .. -rw-r----- 1 notes01... (4 Replies)
Discussion started by: Nicol
4 Replies

8. Shell Programming and Scripting

find with prune option

Hi, I want to list files only from the current dir and its child dir (not from child's child dir). i have the following files, ./ABC/1.log ./ABC/2.log ./ABC/ABC1/A.log ./ABC/ABC1/B.log ./ABC/ABC1/XYZ/A1.log ./ABC/ABC1/XYZ/A2.log Here i want to list only the log file from current... (1 Reply)
Discussion started by: apsprabhu
1 Replies

9. UNIX for Dummies Questions & Answers

Using prune with find command

Hi, I am using a find command like below in my script: find /outfiles -type f -name cat -o -name vi -o -name grep 2>/dev/null Which will search for files like "cat" , "vi" or "grep" in the "/outfiles" and subdirectories. I want to ignore a particular subdirectory from the search. I... (4 Replies)
Discussion started by: deepakgang
4 Replies

10. UNIX for Dummies Questions & Answers

find command with prune help

I have a directory named https-abcd Under that I have some directories, files and links. One of those directories is with name logs and the logs directory has lot of files in it. I need to tar the whole https-abcd directory excluding the logs directory only, I should get all the links, files and... (2 Replies)
Discussion started by: venu_nbk
2 Replies
Login or Register to Ask a Question