loop to traverse subdirectories and execute a perl script into each subdirectory












0















I have a parent directory with multiples subdirectories like this



Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta


And I would like to run the perl scipt in each subdirectory. I'm trying with the next command



find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done


but the output is directed to the parent directory and I want the output in each subdirectory










share|improve this question

























  • Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?

    – roaima
    2 hours ago











  • find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"{}" . ;?

    – DopeGhoti
    2 hours ago


















0















I have a parent directory with multiples subdirectories like this



Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta


And I would like to run the perl scipt in each subdirectory. I'm trying with the next command



find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done


but the output is directed to the parent directory and I want the output in each subdirectory










share|improve this question

























  • Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?

    – roaima
    2 hours ago











  • find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"{}" . ;?

    – DopeGhoti
    2 hours ago
















0












0








0








I have a parent directory with multiples subdirectories like this



Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta


And I would like to run the perl scipt in each subdirectory. I'm trying with the next command



find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done


but the output is directed to the parent directory and I want the output in each subdirectory










share|improve this question
















I have a parent directory with multiples subdirectories like this



Parent_directory
subdirectory_1
perlscript.pl
file.fasta
subdirectory_2
perlscript.pl
file_2.fasta


And I would like to run the perl scipt in each subdirectory. I'm trying with the next command



find . -type d | while read d; do perl hoz-3-v1c.pl $d/* ; done


but the output is directed to the parent directory and I want the output in each subdirectory







shell






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 22 mins ago









mosvy

7,6421530




7,6421530










asked 2 hours ago









erick rodriguezerick rodriguez

111




111













  • Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?

    – roaima
    2 hours ago











  • find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"{}" . ;?

    – DopeGhoti
    2 hours ago





















  • Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?

    – roaima
    2 hours ago











  • find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"{}" . ;?

    – DopeGhoti
    2 hours ago



















Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?

– roaima
2 hours ago





Possible duplicate of How to use `find -exec` to execute command in directory of found file (not current directory)?

– roaima
2 hours ago













find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"{}" . ;?

– DopeGhoti
2 hours ago







find /path/to/Parent_directory -type f -name '*.pl' -execdir perl ./"{}" . ;?

– DopeGhoti
2 hours ago












1 Answer
1






active

oldest

votes


















0














It looks like you don't have to bother with find at all in this instance.



for dirpath in Parent_directory/*/; do
( cd "$dirpath" && perl perlscript.pl *.fasta )
done


This assumes that the Perl script is always called perlscript.pl (as in your example directory layout) and that correct way to run your Perl script is



perl perlscript.pl *.fasta


In the loop above, the parentheses creates a subshell. This prevents the cd from affecting the rest of the script and we don't have to cd back out of the directory after running the Perl script.



The loop will iterate over all subdirectories of Parent_directory and execute the given commands for each.






share|improve this answer























    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',
    autoActivateHeartbeat: false,
    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%2f501970%2floop-to-traverse-subdirectories-and-execute-a-perl-script-into-each-subdirectory%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









    0














    It looks like you don't have to bother with find at all in this instance.



    for dirpath in Parent_directory/*/; do
    ( cd "$dirpath" && perl perlscript.pl *.fasta )
    done


    This assumes that the Perl script is always called perlscript.pl (as in your example directory layout) and that correct way to run your Perl script is



    perl perlscript.pl *.fasta


    In the loop above, the parentheses creates a subshell. This prevents the cd from affecting the rest of the script and we don't have to cd back out of the directory after running the Perl script.



    The loop will iterate over all subdirectories of Parent_directory and execute the given commands for each.






    share|improve this answer




























      0














      It looks like you don't have to bother with find at all in this instance.



      for dirpath in Parent_directory/*/; do
      ( cd "$dirpath" && perl perlscript.pl *.fasta )
      done


      This assumes that the Perl script is always called perlscript.pl (as in your example directory layout) and that correct way to run your Perl script is



      perl perlscript.pl *.fasta


      In the loop above, the parentheses creates a subshell. This prevents the cd from affecting the rest of the script and we don't have to cd back out of the directory after running the Perl script.



      The loop will iterate over all subdirectories of Parent_directory and execute the given commands for each.






      share|improve this answer


























        0












        0








        0







        It looks like you don't have to bother with find at all in this instance.



        for dirpath in Parent_directory/*/; do
        ( cd "$dirpath" && perl perlscript.pl *.fasta )
        done


        This assumes that the Perl script is always called perlscript.pl (as in your example directory layout) and that correct way to run your Perl script is



        perl perlscript.pl *.fasta


        In the loop above, the parentheses creates a subshell. This prevents the cd from affecting the rest of the script and we don't have to cd back out of the directory after running the Perl script.



        The loop will iterate over all subdirectories of Parent_directory and execute the given commands for each.






        share|improve this answer













        It looks like you don't have to bother with find at all in this instance.



        for dirpath in Parent_directory/*/; do
        ( cd "$dirpath" && perl perlscript.pl *.fasta )
        done


        This assumes that the Perl script is always called perlscript.pl (as in your example directory layout) and that correct way to run your Perl script is



        perl perlscript.pl *.fasta


        In the loop above, the parentheses creates a subshell. This prevents the cd from affecting the rest of the script and we don't have to cd back out of the directory after running the Perl script.



        The loop will iterate over all subdirectories of Parent_directory and execute the given commands for each.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 1 hour ago









        KusalanandaKusalananda

        131k17249409




        131k17249409






























            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f501970%2floop-to-traverse-subdirectories-and-execute-a-perl-script-into-each-subdirectory%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

            宮崎県

            濃尾地震

            シテ島