How can I list files in reverse time order by a command and pass them as arguments to another command? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) 2019 Community Moderator Election Results Why I closed the “Why is Kali so hard” questionPrint shell arguments in reverse orderShow sum of file sizes in directory listingbash how to remove options from parameters after processingrefreshing terminal window's view of a recreated directoryGroup lines in a file and feed a group to a program at a timeHow to pass files found by find as arguments?Create variable based on the order a file is in an alphabetical list of filesExpand glob with flag inserted before each filenameWhere shall we place the commands for parsing command line arguments in a script?Reverse the order of file matching as arguments

NIntegrate on a solution of a matrix ODE

Is a copyright notice with a non-existent name be invalid?

Can gravitational waves pass through a black hole?

Sally's older brother

Can two people see the same photon?

How do you write "wild blueberries flavored"?

Does a random sequence of vectors span a Hilbert space?

Any stored/leased 737s that could substitute for grounded MAXs?

As a dual citizen, my US passport will expire one day after traveling to the US. Will this work?

Russian equivalents of おしゃれは足元から (Every good outfit starts with the shoes)

The test team as an enemy of development? And how can this be avoided?

How could a hydrazine and N2O4 cloud (or it's reactants) show up in weather radar?

What was the last profitable war?

Fit odd number of triplets in a measure?

Table formatting with tabularx?

Weaponising the Grasp-at-a-Distance spell

malloc in main() or malloc in another function: allocating memory for a struct and its members

newbie Q : How to read an output file in one command line

Is it OK to use the testing sample to compare algorithms?

How can I prevent/balance waiting and turtling as a response to cooldown mechanics

Determine whether an integer is a palindrome

Why not use the yoke to control yaw, as well as pitch and roll?

An isoperimetric-type inequality inside a cube

Adapting the Chinese Remainder Theorem (CRT) for integers to polynomials



How can I list files in reverse time order by a command and pass them as arguments to another command?



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)
2019 Community Moderator Election Results
Why I closed the “Why is Kali so hard” questionPrint shell arguments in reverse orderShow sum of file sizes in directory listingbash how to remove options from parameters after processingrefreshing terminal window's view of a recreated directoryGroup lines in a file and feed a group to a program at a timeHow to pass files found by find as arguments?Create variable based on the order a file is in an alphabetical list of filesExpand glob with flag inserted before each filenameWhere shall we place the commands for parsing command line arguments in a script?Reverse the order of file matching as arguments



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















I have a program which takes in some files as arguments in one command line. I would like to invoke it with all the files in a directory listed in reverse time order.



For example:



I have following files in reverse time order in a directory



$ ls -tr
Introduction.pdf 'Object-Oriented Data Model.pdf'


I can run my program straightforward,



myprogram Introduction.pdf 'Object-Oriented Data Model.pdf' 


but I want to do the file listing by another command. This won't work because of the space in one file's name:



myprogram $(ls -tr)


I remember parsing ls output is not a good practice. I am not sure if find can help.



What can I do then?



Thanks.










share|improve this question






























    1















    I have a program which takes in some files as arguments in one command line. I would like to invoke it with all the files in a directory listed in reverse time order.



    For example:



    I have following files in reverse time order in a directory



    $ ls -tr
    Introduction.pdf 'Object-Oriented Data Model.pdf'


    I can run my program straightforward,



    myprogram Introduction.pdf 'Object-Oriented Data Model.pdf' 


    but I want to do the file listing by another command. This won't work because of the space in one file's name:



    myprogram $(ls -tr)


    I remember parsing ls output is not a good practice. I am not sure if find can help.



    What can I do then?



    Thanks.










    share|improve this question


























      1












      1








      1


      1






      I have a program which takes in some files as arguments in one command line. I would like to invoke it with all the files in a directory listed in reverse time order.



      For example:



      I have following files in reverse time order in a directory



      $ ls -tr
      Introduction.pdf 'Object-Oriented Data Model.pdf'


      I can run my program straightforward,



      myprogram Introduction.pdf 'Object-Oriented Data Model.pdf' 


      but I want to do the file listing by another command. This won't work because of the space in one file's name:



      myprogram $(ls -tr)


      I remember parsing ls output is not a good practice. I am not sure if find can help.



      What can I do then?



      Thanks.










      share|improve this question
















      I have a program which takes in some files as arguments in one command line. I would like to invoke it with all the files in a directory listed in reverse time order.



      For example:



      I have following files in reverse time order in a directory



      $ ls -tr
      Introduction.pdf 'Object-Oriented Data Model.pdf'


      I can run my program straightforward,



      myprogram Introduction.pdf 'Object-Oriented Data Model.pdf' 


      but I want to do the file listing by another command. This won't work because of the space in one file's name:



      myprogram $(ls -tr)


      I remember parsing ls output is not a good practice. I am not sure if find can help.



      What can I do then?



      Thanks.







      bash






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 4 hours ago







      Tim

















      asked 6 hours ago









      TimTim

      28.9k79270495




      28.9k79270495




















          2 Answers
          2






          active

          oldest

          votes


















          2














          If you've got reasonably up-to-date versions of the GNU utilities you can have them handle NULL-terminated data. This allows one to construct pipelines that are not affected by whitespace or newlines in the data itself.



          My test tool is a quick script called /tmp/args:



          #!/bin/bash
          echo "This is args with $# value(s)"
          for f in "$@"; do echo "> $f <"; done


          This is how you can feed it a series of filenames on the command line, sorted by file time last modified:



          find -type f -printf "%T@ %p" | sort -z | sed -z 's/^[0-9.]* //' | xargs -0 /tmp/args


          The find command prefixes each file/path name with a representation in fractional seconds of the date/time last modified. This is handled by sort to order from lowest (oldest) to highest (newest). The sed strips off the leading number we've just used to sort by, and the resulting set of filenames are passed to xargs. Replace the %p with %P if you prefer to omit the leading ./ from filenames.



          Example data



          # "c d" contains a space; "e f" contains a newline; "h" has leading whitespace
          touch a 'e
          f' g ' h ' 'c d' b


          Example result



          This is args with 6 value(s)
          > ./a <
          > ./e
          f <
          > ./g <
          > ./ h <
          > ./c d <
          > ./b <





          share|improve this answer






























            1














            (IFS=$'n'; set -f; your_program $(ls -tr))


            Assuming that the filenames don't contain newlines.



            Example:



            % touch 'a b'
            % touch 'c d'
            % touch '*'
            % (IFS=$'n'; set -f; printf '%sn' $(ls -tr))
            e f
            a b
            c d
            *


            Variant for a standard shell which doesn't support $'...' strings:



            (IFS='
            ' ; set -f; your_program $(ls -tr))



            Simple python wrapper which will work even with filenames containing newlines. Usage can be this_wrapper your_program *.



            #! /usr/bin/python
            import os
            import sys

            sys.argv[2:] = sorted(sys.argv[2:], key=os.path.getmtime)
            os.execvp(sys.argv[1], sys.argv[1:])





            share|improve this answer

























            • Thanks. What if the filenames contains newlines

              – Tim
              5 hours ago











            • Then this won't work ;-) -- and you'll have to use something like perl or python.

              – Uncle Billy
              5 hours ago











            • Thanks. How will you use Python?

              – Tim
              5 hours ago






            • 1





              I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

              – Uncle Billy
              5 hours ago






            • 1





              @Freddy Rarely. But everything is possible.

              – Tim
              4 hours ago












            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%2f513695%2fhow-can-i-list-files-in-reverse-time-order-by-a-command-and-pass-them-as-argumen%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            If you've got reasonably up-to-date versions of the GNU utilities you can have them handle NULL-terminated data. This allows one to construct pipelines that are not affected by whitespace or newlines in the data itself.



            My test tool is a quick script called /tmp/args:



            #!/bin/bash
            echo "This is args with $# value(s)"
            for f in "$@"; do echo "> $f <"; done


            This is how you can feed it a series of filenames on the command line, sorted by file time last modified:



            find -type f -printf "%T@ %p" | sort -z | sed -z 's/^[0-9.]* //' | xargs -0 /tmp/args


            The find command prefixes each file/path name with a representation in fractional seconds of the date/time last modified. This is handled by sort to order from lowest (oldest) to highest (newest). The sed strips off the leading number we've just used to sort by, and the resulting set of filenames are passed to xargs. Replace the %p with %P if you prefer to omit the leading ./ from filenames.



            Example data



            # "c d" contains a space; "e f" contains a newline; "h" has leading whitespace
            touch a 'e
            f' g ' h ' 'c d' b


            Example result



            This is args with 6 value(s)
            > ./a <
            > ./e
            f <
            > ./g <
            > ./ h <
            > ./c d <
            > ./b <





            share|improve this answer



























              2














              If you've got reasonably up-to-date versions of the GNU utilities you can have them handle NULL-terminated data. This allows one to construct pipelines that are not affected by whitespace or newlines in the data itself.



              My test tool is a quick script called /tmp/args:



              #!/bin/bash
              echo "This is args with $# value(s)"
              for f in "$@"; do echo "> $f <"; done


              This is how you can feed it a series of filenames on the command line, sorted by file time last modified:



              find -type f -printf "%T@ %p" | sort -z | sed -z 's/^[0-9.]* //' | xargs -0 /tmp/args


              The find command prefixes each file/path name with a representation in fractional seconds of the date/time last modified. This is handled by sort to order from lowest (oldest) to highest (newest). The sed strips off the leading number we've just used to sort by, and the resulting set of filenames are passed to xargs. Replace the %p with %P if you prefer to omit the leading ./ from filenames.



              Example data



              # "c d" contains a space; "e f" contains a newline; "h" has leading whitespace
              touch a 'e
              f' g ' h ' 'c d' b


              Example result



              This is args with 6 value(s)
              > ./a <
              > ./e
              f <
              > ./g <
              > ./ h <
              > ./c d <
              > ./b <





              share|improve this answer

























                2












                2








                2







                If you've got reasonably up-to-date versions of the GNU utilities you can have them handle NULL-terminated data. This allows one to construct pipelines that are not affected by whitespace or newlines in the data itself.



                My test tool is a quick script called /tmp/args:



                #!/bin/bash
                echo "This is args with $# value(s)"
                for f in "$@"; do echo "> $f <"; done


                This is how you can feed it a series of filenames on the command line, sorted by file time last modified:



                find -type f -printf "%T@ %p" | sort -z | sed -z 's/^[0-9.]* //' | xargs -0 /tmp/args


                The find command prefixes each file/path name with a representation in fractional seconds of the date/time last modified. This is handled by sort to order from lowest (oldest) to highest (newest). The sed strips off the leading number we've just used to sort by, and the resulting set of filenames are passed to xargs. Replace the %p with %P if you prefer to omit the leading ./ from filenames.



                Example data



                # "c d" contains a space; "e f" contains a newline; "h" has leading whitespace
                touch a 'e
                f' g ' h ' 'c d' b


                Example result



                This is args with 6 value(s)
                > ./a <
                > ./e
                f <
                > ./g <
                > ./ h <
                > ./c d <
                > ./b <





                share|improve this answer













                If you've got reasonably up-to-date versions of the GNU utilities you can have them handle NULL-terminated data. This allows one to construct pipelines that are not affected by whitespace or newlines in the data itself.



                My test tool is a quick script called /tmp/args:



                #!/bin/bash
                echo "This is args with $# value(s)"
                for f in "$@"; do echo "> $f <"; done


                This is how you can feed it a series of filenames on the command line, sorted by file time last modified:



                find -type f -printf "%T@ %p" | sort -z | sed -z 's/^[0-9.]* //' | xargs -0 /tmp/args


                The find command prefixes each file/path name with a representation in fractional seconds of the date/time last modified. This is handled by sort to order from lowest (oldest) to highest (newest). The sed strips off the leading number we've just used to sort by, and the resulting set of filenames are passed to xargs. Replace the %p with %P if you prefer to omit the leading ./ from filenames.



                Example data



                # "c d" contains a space; "e f" contains a newline; "h" has leading whitespace
                touch a 'e
                f' g ' h ' 'c d' b


                Example result



                This is args with 6 value(s)
                > ./a <
                > ./e
                f <
                > ./g <
                > ./ h <
                > ./c d <
                > ./b <






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 4 hours ago









                roaimaroaima

                46.4k758124




                46.4k758124























                    1














                    (IFS=$'n'; set -f; your_program $(ls -tr))


                    Assuming that the filenames don't contain newlines.



                    Example:



                    % touch 'a b'
                    % touch 'c d'
                    % touch '*'
                    % (IFS=$'n'; set -f; printf '%sn' $(ls -tr))
                    e f
                    a b
                    c d
                    *


                    Variant for a standard shell which doesn't support $'...' strings:



                    (IFS='
                    ' ; set -f; your_program $(ls -tr))



                    Simple python wrapper which will work even with filenames containing newlines. Usage can be this_wrapper your_program *.



                    #! /usr/bin/python
                    import os
                    import sys

                    sys.argv[2:] = sorted(sys.argv[2:], key=os.path.getmtime)
                    os.execvp(sys.argv[1], sys.argv[1:])





                    share|improve this answer

























                    • Thanks. What if the filenames contains newlines

                      – Tim
                      5 hours ago











                    • Then this won't work ;-) -- and you'll have to use something like perl or python.

                      – Uncle Billy
                      5 hours ago











                    • Thanks. How will you use Python?

                      – Tim
                      5 hours ago






                    • 1





                      I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

                      – Uncle Billy
                      5 hours ago






                    • 1





                      @Freddy Rarely. But everything is possible.

                      – Tim
                      4 hours ago
















                    1














                    (IFS=$'n'; set -f; your_program $(ls -tr))


                    Assuming that the filenames don't contain newlines.



                    Example:



                    % touch 'a b'
                    % touch 'c d'
                    % touch '*'
                    % (IFS=$'n'; set -f; printf '%sn' $(ls -tr))
                    e f
                    a b
                    c d
                    *


                    Variant for a standard shell which doesn't support $'...' strings:



                    (IFS='
                    ' ; set -f; your_program $(ls -tr))



                    Simple python wrapper which will work even with filenames containing newlines. Usage can be this_wrapper your_program *.



                    #! /usr/bin/python
                    import os
                    import sys

                    sys.argv[2:] = sorted(sys.argv[2:], key=os.path.getmtime)
                    os.execvp(sys.argv[1], sys.argv[1:])





                    share|improve this answer

























                    • Thanks. What if the filenames contains newlines

                      – Tim
                      5 hours ago











                    • Then this won't work ;-) -- and you'll have to use something like perl or python.

                      – Uncle Billy
                      5 hours ago











                    • Thanks. How will you use Python?

                      – Tim
                      5 hours ago






                    • 1





                      I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

                      – Uncle Billy
                      5 hours ago






                    • 1





                      @Freddy Rarely. But everything is possible.

                      – Tim
                      4 hours ago














                    1












                    1








                    1







                    (IFS=$'n'; set -f; your_program $(ls -tr))


                    Assuming that the filenames don't contain newlines.



                    Example:



                    % touch 'a b'
                    % touch 'c d'
                    % touch '*'
                    % (IFS=$'n'; set -f; printf '%sn' $(ls -tr))
                    e f
                    a b
                    c d
                    *


                    Variant for a standard shell which doesn't support $'...' strings:



                    (IFS='
                    ' ; set -f; your_program $(ls -tr))



                    Simple python wrapper which will work even with filenames containing newlines. Usage can be this_wrapper your_program *.



                    #! /usr/bin/python
                    import os
                    import sys

                    sys.argv[2:] = sorted(sys.argv[2:], key=os.path.getmtime)
                    os.execvp(sys.argv[1], sys.argv[1:])





                    share|improve this answer















                    (IFS=$'n'; set -f; your_program $(ls -tr))


                    Assuming that the filenames don't contain newlines.



                    Example:



                    % touch 'a b'
                    % touch 'c d'
                    % touch '*'
                    % (IFS=$'n'; set -f; printf '%sn' $(ls -tr))
                    e f
                    a b
                    c d
                    *


                    Variant for a standard shell which doesn't support $'...' strings:



                    (IFS='
                    ' ; set -f; your_program $(ls -tr))



                    Simple python wrapper which will work even with filenames containing newlines. Usage can be this_wrapper your_program *.



                    #! /usr/bin/python
                    import os
                    import sys

                    sys.argv[2:] = sorted(sys.argv[2:], key=os.path.getmtime)
                    os.execvp(sys.argv[1], sys.argv[1:])






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 3 hours ago

























                    answered 5 hours ago









                    Uncle BillyUncle Billy

                    9648




                    9648












                    • Thanks. What if the filenames contains newlines

                      – Tim
                      5 hours ago











                    • Then this won't work ;-) -- and you'll have to use something like perl or python.

                      – Uncle Billy
                      5 hours ago











                    • Thanks. How will you use Python?

                      – Tim
                      5 hours ago






                    • 1





                      I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

                      – Uncle Billy
                      5 hours ago






                    • 1





                      @Freddy Rarely. But everything is possible.

                      – Tim
                      4 hours ago


















                    • Thanks. What if the filenames contains newlines

                      – Tim
                      5 hours ago











                    • Then this won't work ;-) -- and you'll have to use something like perl or python.

                      – Uncle Billy
                      5 hours ago











                    • Thanks. How will you use Python?

                      – Tim
                      5 hours ago






                    • 1





                      I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

                      – Uncle Billy
                      5 hours ago






                    • 1





                      @Freddy Rarely. But everything is possible.

                      – Tim
                      4 hours ago

















                    Thanks. What if the filenames contains newlines

                    – Tim
                    5 hours ago





                    Thanks. What if the filenames contains newlines

                    – Tim
                    5 hours ago













                    Then this won't work ;-) -- and you'll have to use something like perl or python.

                    – Uncle Billy
                    5 hours ago





                    Then this won't work ;-) -- and you'll have to use something like perl or python.

                    – Uncle Billy
                    5 hours ago













                    Thanks. How will you use Python?

                    – Tim
                    5 hours ago





                    Thanks. How will you use Python?

                    – Tim
                    5 hours ago




                    1




                    1





                    I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

                    – Uncle Billy
                    5 hours ago





                    I'm no python programmer, but since nobody steps in .... YMMV, that may not be the state of the art ;-)

                    – Uncle Billy
                    5 hours ago




                    1




                    1





                    @Freddy Rarely. But everything is possible.

                    – Tim
                    4 hours ago






                    @Freddy Rarely. But everything is possible.

                    – Tim
                    4 hours ago


















                    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%2f513695%2fhow-can-i-list-files-in-reverse-time-order-by-a-command-and-pass-them-as-argumen%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

                    名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

                    Prove that NP is closed under karp reduction?Space(n) not closed under Karp reductions - what about NTime(n)?Class P is closed under rotation?Prove or disprove that $NL$ is closed under polynomial many-one reductions$mathbfNC_2$ is closed under log-space reductionOn Karp reductionwhen can I know if a class (complexity) is closed under reduction (cook/karp)Check if class $PSPACE$ is closed under polyonomially space reductionIs NPSPACE also closed under polynomial-time reduction and under log-space reduction?Prove PSPACE is closed under complement?Prove PSPACE is closed under union?

                    Is my guitar’s action too high? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Strings too stiff on a recently purchased acoustic guitar | Cort AD880CEIs the action of my guitar really high?Μy little finger is too weak to play guitarWith guitar, how long should I give my fingers to strengthen / callous?When playing a fret the guitar sounds mutedPlaying (Barre) chords up the guitar neckI think my guitar strings are wound too tight and I can't play barre chordsF barre chord on an SG guitarHow to find to the right strings of a barre chord by feel?High action on higher fret on my steel acoustic guitar