how to have 'find' not return the current directory
I'm currently trying to find
(and copy) all files and folder structure matching a specific pattern, in a specified directory and I'm so nearly there!
Specifically, I want to recursively copy all folders not begining with a '_' character from a specified path.
find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;
In the /source/path/with/directories/ path are machine-specific directories beginning with '_' and others, and I'm only interested in copying the others. For a reason beyond me, the find command returns the /source/path/with/directories/ directory, and therefore copies its content, directories begining with '_' included.
Anyone have a hint as to why that is?
Thanks,
Pascal
Solution 1:
find
returns the root path because it matches your criteria—i.e. it is a directory, and it doesn't start with _
.
You're looking for -mindepth 1
, I suspect:
$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d
Reference: find manpage