Can I concurrently pull my git repos without gnu parallel?

Multi tool use
Multi tool use

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
1
down vote

favorite












On my home machine, I use the script gitpull.sh to concurrently pull all the changes to the git repos under a given directory.



#!/usr/bin/bash

find $1 -name ".git" | sed -r 's|/[^/]+$||' | parallel git -C pull origin master


My problem is that parallel is not installed on my work computer. Is it possible to alter my script without the use of parallel?







share|improve this question




















  • do you have GNU findutils on your work computer? or something else that provides xargs? if so, you can write a version of your gitpull.sh that pipes the sed output into a shell function that does something like xargs -I git pull -C origin master &.
    – cas
    Jan 4 at 8:40











  • Is the reason why you do not have GNU Parallel covered by oletange.blogspot.com/2013/04/why-not-install-gnu-parallel.html? If not, please elaborate.
    – Ole Tange
    Jan 5 at 4:26














up vote
1
down vote

favorite












On my home machine, I use the script gitpull.sh to concurrently pull all the changes to the git repos under a given directory.



#!/usr/bin/bash

find $1 -name ".git" | sed -r 's|/[^/]+$||' | parallel git -C pull origin master


My problem is that parallel is not installed on my work computer. Is it possible to alter my script without the use of parallel?







share|improve this question




















  • do you have GNU findutils on your work computer? or something else that provides xargs? if so, you can write a version of your gitpull.sh that pipes the sed output into a shell function that does something like xargs -I git pull -C origin master &.
    – cas
    Jan 4 at 8:40











  • Is the reason why you do not have GNU Parallel covered by oletange.blogspot.com/2013/04/why-not-install-gnu-parallel.html? If not, please elaborate.
    – Ole Tange
    Jan 5 at 4:26












up vote
1
down vote

favorite









up vote
1
down vote

favorite











On my home machine, I use the script gitpull.sh to concurrently pull all the changes to the git repos under a given directory.



#!/usr/bin/bash

find $1 -name ".git" | sed -r 's|/[^/]+$||' | parallel git -C pull origin master


My problem is that parallel is not installed on my work computer. Is it possible to alter my script without the use of parallel?







share|improve this question












On my home machine, I use the script gitpull.sh to concurrently pull all the changes to the git repos under a given directory.



#!/usr/bin/bash

find $1 -name ".git" | sed -r 's|/[^/]+$||' | parallel git -C pull origin master


My problem is that parallel is not installed on my work computer. Is it possible to alter my script without the use of parallel?









share|improve this question











share|improve this question




share|improve this question










asked Jan 4 at 8:15









Brian Fitzpatrick

7291921




7291921











  • do you have GNU findutils on your work computer? or something else that provides xargs? if so, you can write a version of your gitpull.sh that pipes the sed output into a shell function that does something like xargs -I git pull -C origin master &.
    – cas
    Jan 4 at 8:40











  • Is the reason why you do not have GNU Parallel covered by oletange.blogspot.com/2013/04/why-not-install-gnu-parallel.html? If not, please elaborate.
    – Ole Tange
    Jan 5 at 4:26
















  • do you have GNU findutils on your work computer? or something else that provides xargs? if so, you can write a version of your gitpull.sh that pipes the sed output into a shell function that does something like xargs -I git pull -C origin master &.
    – cas
    Jan 4 at 8:40











  • Is the reason why you do not have GNU Parallel covered by oletange.blogspot.com/2013/04/why-not-install-gnu-parallel.html? If not, please elaborate.
    – Ole Tange
    Jan 5 at 4:26















do you have GNU findutils on your work computer? or something else that provides xargs? if so, you can write a version of your gitpull.sh that pipes the sed output into a shell function that does something like xargs -I git pull -C origin master &.
– cas
Jan 4 at 8:40





do you have GNU findutils on your work computer? or something else that provides xargs? if so, you can write a version of your gitpull.sh that pipes the sed output into a shell function that does something like xargs -I git pull -C origin master &.
– cas
Jan 4 at 8:40













Is the reason why you do not have GNU Parallel covered by oletange.blogspot.com/2013/04/why-not-install-gnu-parallel.html? If not, please elaborate.
– Ole Tange
Jan 5 at 4:26




Is the reason why you do not have GNU Parallel covered by oletange.blogspot.com/2013/04/why-not-install-gnu-parallel.html? If not, please elaborate.
– Ole Tange
Jan 5 at 4:26










3 Answers
3






active

oldest

votes

















up vote
2
down vote



accepted










Instead of parallel you could use xargs with the -P flag. Something like:



find $1 -name ".git" | sed -r 's|/[^/]+$||' | xargs -I -n 1 -P 0 git -C pull origin master





share|improve this answer



























    up vote
    2
    down vote













    You can use this tool Git-Plus to concurrently pull all the changes to the git repos under a given directory. Use this command



    $ git multi pull


    You can easily install it and use it .






    share|improve this answer



























      up vote
      1
      down vote













      You can do it using only bash, readlink, and find:



      #!/bin/bash

      while IFS= read -d '' -r g ; do
      dir="$(readlink -f "$g/..")"
      git pull -C "$dir" origin master &
      done < <(find "$@" -name '.git' -print0)


      You can make it run a bit faster with careful use of find's -maxdepth option. e.g. if you know that all .git directories are going to be found only in the top-level sub-directories of the current directory, -maxdepth 3 will stop it recursing into any lower sub-directories.



      I've used "$@" with the find command rather than the unquoted $1 you used so that not only is a directory argument optional, you can use multiple directory args and/or add whatever find options you might need to the command line.



      If the version of find on your work computer doesn't do -print0, you can use n as the input separator, but the script will break if any directory names contain a newline (which is uncommon but perfectly valid).



      while IFS= read -r g ; do 
      dir="$(readlink -f "$g/..")"
      git pull -C "$dir" origin master &
      done < <(find "$@" -name '.git')





      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',
        convertImagesToLinks: false,
        noModals: false,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: null,
        bindNavPrevention: true,
        postfix: "",
        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%2f414719%2fcan-i-concurrently-pull-my-git-repos-without-gnu-parallel%23new-answer', 'question_page');

        );

        Post as a guest






























        3 Answers
        3






        active

        oldest

        votes








        3 Answers
        3






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes








        up vote
        2
        down vote



        accepted










        Instead of parallel you could use xargs with the -P flag. Something like:



        find $1 -name ".git" | sed -r 's|/[^/]+$||' | xargs -I -n 1 -P 0 git -C pull origin master





        share|improve this answer
























          up vote
          2
          down vote



          accepted










          Instead of parallel you could use xargs with the -P flag. Something like:



          find $1 -name ".git" | sed -r 's|/[^/]+$||' | xargs -I -n 1 -P 0 git -C pull origin master





          share|improve this answer






















            up vote
            2
            down vote



            accepted







            up vote
            2
            down vote



            accepted






            Instead of parallel you could use xargs with the -P flag. Something like:



            find $1 -name ".git" | sed -r 's|/[^/]+$||' | xargs -I -n 1 -P 0 git -C pull origin master





            share|improve this answer












            Instead of parallel you could use xargs with the -P flag. Something like:



            find $1 -name ".git" | sed -r 's|/[^/]+$||' | xargs -I -n 1 -P 0 git -C pull origin master






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Jan 4 at 8:48









            sapensadler

            48016




            48016






















                up vote
                2
                down vote













                You can use this tool Git-Plus to concurrently pull all the changes to the git repos under a given directory. Use this command



                $ git multi pull


                You can easily install it and use it .






                share|improve this answer
























                  up vote
                  2
                  down vote













                  You can use this tool Git-Plus to concurrently pull all the changes to the git repos under a given directory. Use this command



                  $ git multi pull


                  You can easily install it and use it .






                  share|improve this answer






















                    up vote
                    2
                    down vote










                    up vote
                    2
                    down vote









                    You can use this tool Git-Plus to concurrently pull all the changes to the git repos under a given directory. Use this command



                    $ git multi pull


                    You can easily install it and use it .






                    share|improve this answer












                    You can use this tool Git-Plus to concurrently pull all the changes to the git repos under a given directory. Use this command



                    $ git multi pull


                    You can easily install it and use it .







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Jan 4 at 10:01









                    Jai Prak

                    1212




                    1212




















                        up vote
                        1
                        down vote













                        You can do it using only bash, readlink, and find:



                        #!/bin/bash

                        while IFS= read -d '' -r g ; do
                        dir="$(readlink -f "$g/..")"
                        git pull -C "$dir" origin master &
                        done < <(find "$@" -name '.git' -print0)


                        You can make it run a bit faster with careful use of find's -maxdepth option. e.g. if you know that all .git directories are going to be found only in the top-level sub-directories of the current directory, -maxdepth 3 will stop it recursing into any lower sub-directories.



                        I've used "$@" with the find command rather than the unquoted $1 you used so that not only is a directory argument optional, you can use multiple directory args and/or add whatever find options you might need to the command line.



                        If the version of find on your work computer doesn't do -print0, you can use n as the input separator, but the script will break if any directory names contain a newline (which is uncommon but perfectly valid).



                        while IFS= read -r g ; do 
                        dir="$(readlink -f "$g/..")"
                        git pull -C "$dir" origin master &
                        done < <(find "$@" -name '.git')





                        share|improve this answer


























                          up vote
                          1
                          down vote













                          You can do it using only bash, readlink, and find:



                          #!/bin/bash

                          while IFS= read -d '' -r g ; do
                          dir="$(readlink -f "$g/..")"
                          git pull -C "$dir" origin master &
                          done < <(find "$@" -name '.git' -print0)


                          You can make it run a bit faster with careful use of find's -maxdepth option. e.g. if you know that all .git directories are going to be found only in the top-level sub-directories of the current directory, -maxdepth 3 will stop it recursing into any lower sub-directories.



                          I've used "$@" with the find command rather than the unquoted $1 you used so that not only is a directory argument optional, you can use multiple directory args and/or add whatever find options you might need to the command line.



                          If the version of find on your work computer doesn't do -print0, you can use n as the input separator, but the script will break if any directory names contain a newline (which is uncommon but perfectly valid).



                          while IFS= read -r g ; do 
                          dir="$(readlink -f "$g/..")"
                          git pull -C "$dir" origin master &
                          done < <(find "$@" -name '.git')





                          share|improve this answer
























                            up vote
                            1
                            down vote










                            up vote
                            1
                            down vote









                            You can do it using only bash, readlink, and find:



                            #!/bin/bash

                            while IFS= read -d '' -r g ; do
                            dir="$(readlink -f "$g/..")"
                            git pull -C "$dir" origin master &
                            done < <(find "$@" -name '.git' -print0)


                            You can make it run a bit faster with careful use of find's -maxdepth option. e.g. if you know that all .git directories are going to be found only in the top-level sub-directories of the current directory, -maxdepth 3 will stop it recursing into any lower sub-directories.



                            I've used "$@" with the find command rather than the unquoted $1 you used so that not only is a directory argument optional, you can use multiple directory args and/or add whatever find options you might need to the command line.



                            If the version of find on your work computer doesn't do -print0, you can use n as the input separator, but the script will break if any directory names contain a newline (which is uncommon but perfectly valid).



                            while IFS= read -r g ; do 
                            dir="$(readlink -f "$g/..")"
                            git pull -C "$dir" origin master &
                            done < <(find "$@" -name '.git')





                            share|improve this answer














                            You can do it using only bash, readlink, and find:



                            #!/bin/bash

                            while IFS= read -d '' -r g ; do
                            dir="$(readlink -f "$g/..")"
                            git pull -C "$dir" origin master &
                            done < <(find "$@" -name '.git' -print0)


                            You can make it run a bit faster with careful use of find's -maxdepth option. e.g. if you know that all .git directories are going to be found only in the top-level sub-directories of the current directory, -maxdepth 3 will stop it recursing into any lower sub-directories.



                            I've used "$@" with the find command rather than the unquoted $1 you used so that not only is a directory argument optional, you can use multiple directory args and/or add whatever find options you might need to the command line.



                            If the version of find on your work computer doesn't do -print0, you can use n as the input separator, but the script will break if any directory names contain a newline (which is uncommon but perfectly valid).



                            while IFS= read -r g ; do 
                            dir="$(readlink -f "$g/..")"
                            git pull -C "$dir" origin master &
                            done < <(find "$@" -name '.git')






                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited Jan 4 at 10:12

























                            answered Jan 4 at 9:28









                            cas

                            37.7k44394




                            37.7k44394






















                                 

                                draft saved


                                draft discarded


























                                 


                                draft saved


                                draft discarded














                                StackExchange.ready(
                                function ()
                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f414719%2fcan-i-concurrently-pull-my-git-repos-without-gnu-parallel%23new-answer', 'question_page');

                                );

                                Post as a guest













































































                                b Zd4Ek6YYI0,3C99WqwTB6MqzNdrYYm,4aYMWlnhM3e0Zde5IVlAYCTL FMM4Ff8FhgL8Z3,1C6zTB2d7u 0xKF53ds
                                IbYsYZ DMzUCdRS Mj C1,Ul Lrllgg hq8woRFJlzcPocr7z

                                Popular posts from this blog

                                How to check contact read email or not when send email to Individual?

                                How many registers does an x86_64 CPU actually have?

                                Displaying single band from multi-band raster using QGIS