Here’s how you can specify that with find:
find . -type f -name "*_peaks.bed" ! -path "./tmp/*" ! -path "./scripts/*"
Explanation:
find .– Start find from current working directory (recursively by default)-type f– Specify tofindthat you only want files in the results-name "*_peaks.bed"– Look for files with the name ending in_peaks.bed! -path "./tmp/*"– Exclude all results whose path starts with./tmp/! -path "./scripts/*"– Also exclude all results whose path starts with./scripts/
Testing the Solution:
$ mkdir a b c d e
$ touch a/1 b/2 c/3 d/4 e/5 e/a e/b
$ find . -type f ! -path "./a/*" ! -path "./b/*"
./d/4
./c/3
./e/a
./e/b
./e/5
You were pretty close, the -name option only considers the basename, where as -path considers the entire path =)