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

The name of the pictureThe name of the pictureThe name of the pictureClash 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.










share|improve this question



























    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.










    share|improve this question

























      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.










      share|improve this question















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 26 at 0:30









      Rui F Ribeiro

      38.3k1477127




      38.3k1477127










      asked Nov 1 '13 at 16:37









      Doug Stephen

      2221411




      2221411




















          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 -wholename test more useful, or perhaps -samefile. Alternatively, if you are using GNU grep, you could use find ... -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.






          share|improve this answer




















          • 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










          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "106"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          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

























          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 -wholename test more useful, or perhaps -samefile. Alternatively, if you are using GNU grep, you could use find ... -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.






          share|improve this answer




















          • 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














          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 -wholename test more useful, or perhaps -samefile. Alternatively, if you are using GNU grep, you could use find ... -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.






          share|improve this answer




















          • 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












          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 -wholename test more useful, or perhaps -samefile. Alternatively, if you are using GNU grep, you could use find ... -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.






          share|improve this answer












          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 -wholename test more useful, or perhaps -samefile. Alternatively, if you are using GNU grep, you could use find ... -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.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          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
















          • 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

















          draft saved

          draft discarded
















































          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.




          draft saved


          draft discarded














          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





















































          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






          Popular posts from this blog

          Peggy Mitchell

          Palaiologos

          The Forum (Inglewood, California)