Find a particular nesting of directory names, e.g. …/project/dir1/dir2

Clash Royale CLAN TAG#URR8PPP
up vote
3
down vote
favorite
I'm having some issues dealing with the find command; I don't know the syntax for it very well and I need to use it in a script to find a specific directory structure that could be located anywhere.
Basically, I have a structure like "project/dir1/dir2" that I know will always be exactly those three directories, with the same names, in that order. What may not be the same is how deep this structure is nested; for example you could have:
$HOME/project/dir1/dir2
or
$HOME/workspace/project/dir1/dir2
Basically I need a general way to locate the project/dir1/dir2 structure no matter how far deeply buried it is.
This will always be on Ubuntu. I thought about using locate, but then I'd have to guarantee that the locate db is always up to date.
shell-script find directory
add a comment |
up vote
3
down vote
favorite
I'm having some issues dealing with the find command; I don't know the syntax for it very well and I need to use it in a script to find a specific directory structure that could be located anywhere.
Basically, I have a structure like "project/dir1/dir2" that I know will always be exactly those three directories, with the same names, in that order. What may not be the same is how deep this structure is nested; for example you could have:
$HOME/project/dir1/dir2
or
$HOME/workspace/project/dir1/dir2
Basically I need a general way to locate the project/dir1/dir2 structure no matter how far deeply buried it is.
This will always be on Ubuntu. I thought about using locate, but then I'd have to guarantee that the locate db is always up to date.
shell-script find directory
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
I'm having some issues dealing with the find command; I don't know the syntax for it very well and I need to use it in a script to find a specific directory structure that could be located anywhere.
Basically, I have a structure like "project/dir1/dir2" that I know will always be exactly those three directories, with the same names, in that order. What may not be the same is how deep this structure is nested; for example you could have:
$HOME/project/dir1/dir2
or
$HOME/workspace/project/dir1/dir2
Basically I need a general way to locate the project/dir1/dir2 structure no matter how far deeply buried it is.
This will always be on Ubuntu. I thought about using locate, but then I'd have to guarantee that the locate db is always up to date.
shell-script find directory
I'm having some issues dealing with the find command; I don't know the syntax for it very well and I need to use it in a script to find a specific directory structure that could be located anywhere.
Basically, I have a structure like "project/dir1/dir2" that I know will always be exactly those three directories, with the same names, in that order. What may not be the same is how deep this structure is nested; for example you could have:
$HOME/project/dir1/dir2
or
$HOME/workspace/project/dir1/dir2
Basically I need a general way to locate the project/dir1/dir2 structure no matter how far deeply buried it is.
This will always be on Ubuntu. I thought about using locate, but then I'd have to guarantee that the locate db is always up to date.
shell-script find directory
shell-script find directory
edited Nov 26 at 0:30
Rui F Ribeiro
38.3k1477127
38.3k1477127
asked Nov 1 '13 at 16:37
Doug Stephen
2221411
2221411
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
6
down vote
accepted
If you used find -name project/dir1/dir2 you will find a message like this:
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that
-name 'project/dir1/dir2'will probably evaluate to false all the time on this system. You might find the-wholenametest more useful, or perhaps-samefile. Alternatively, if you are using GNU grep, you could usefind ... -print0 | grep -FzZproject/dir1/dir2'`.
So, it offers certain alternatives for such task. Weird it doesn't mention the -path command to find:
find -path "*/project/dir1/dir2" -print
Please, notice the */ at the beginning. These tells find to print any path that ends with /project/dir1/dir2 and the name of the first directory has to be project otherwise it will find myproject/dir1/dir2 and such.
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
6
down vote
accepted
If you used find -name project/dir1/dir2 you will find a message like this:
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that
-name 'project/dir1/dir2'will probably evaluate to false all the time on this system. You might find the-wholenametest more useful, or perhaps-samefile. Alternatively, if you are using GNU grep, you could usefind ... -print0 | grep -FzZproject/dir1/dir2'`.
So, it offers certain alternatives for such task. Weird it doesn't mention the -path command to find:
find -path "*/project/dir1/dir2" -print
Please, notice the */ at the beginning. These tells find to print any path that ends with /project/dir1/dir2 and the name of the first directory has to be project otherwise it will find myproject/dir1/dir2 and such.
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
add a comment |
up vote
6
down vote
accepted
If you used find -name project/dir1/dir2 you will find a message like this:
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that
-name 'project/dir1/dir2'will probably evaluate to false all the time on this system. You might find the-wholenametest more useful, or perhaps-samefile. Alternatively, if you are using GNU grep, you could usefind ... -print0 | grep -FzZproject/dir1/dir2'`.
So, it offers certain alternatives for such task. Weird it doesn't mention the -path command to find:
find -path "*/project/dir1/dir2" -print
Please, notice the */ at the beginning. These tells find to print any path that ends with /project/dir1/dir2 and the name of the first directory has to be project otherwise it will find myproject/dir1/dir2 and such.
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
add a comment |
up vote
6
down vote
accepted
up vote
6
down vote
accepted
If you used find -name project/dir1/dir2 you will find a message like this:
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that
-name 'project/dir1/dir2'will probably evaluate to false all the time on this system. You might find the-wholenametest more useful, or perhaps-samefile. Alternatively, if you are using GNU grep, you could usefind ... -print0 | grep -FzZproject/dir1/dir2'`.
So, it offers certain alternatives for such task. Weird it doesn't mention the -path command to find:
find -path "*/project/dir1/dir2" -print
Please, notice the */ at the beginning. These tells find to print any path that ends with /project/dir1/dir2 and the name of the first directory has to be project otherwise it will find myproject/dir1/dir2 and such.
If you used find -name project/dir1/dir2 you will find a message like this:
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that
-name 'project/dir1/dir2'will probably evaluate to false all the time on this system. You might find the-wholenametest more useful, or perhaps-samefile. Alternatively, if you are using GNU grep, you could usefind ... -print0 | grep -FzZproject/dir1/dir2'`.
So, it offers certain alternatives for such task. Weird it doesn't mention the -path command to find:
find -path "*/project/dir1/dir2" -print
Please, notice the */ at the beginning. These tells find to print any path that ends with /project/dir1/dir2 and the name of the first directory has to be project otherwise it will find myproject/dir1/dir2 and such.
answered Nov 1 '13 at 17:14
Braiam
22.9k1974136
22.9k1974136
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
add a comment |
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
This seems to work. I tried it earlier and it didn't work but I'm away from my Ubuntu install and was trying to prototype this on an OS X machine. Works on my *nix machine. I should have expected that the BSD find wouldn't work the same.
– Doug Stephen
Nov 1 '13 at 21:46
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f98442%2ffind-a-particular-nesting-of-directory-names-e-g-project-dir1-dir2%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown