Comparing the time of a symlink












3















I want to check whether link lnkfile is older than a regular reference file reffile.



The bash test builtin dereferences links, so test lnkfile -ot reffile compares the target of lnkfile, not the link itself.



Is there a way to make the test builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?










share|improve this question





























    3















    I want to check whether link lnkfile is older than a regular reference file reffile.



    The bash test builtin dereferences links, so test lnkfile -ot reffile compares the target of lnkfile, not the link itself.



    Is there a way to make the test builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?










    share|improve this question



























      3












      3








      3








      I want to check whether link lnkfile is older than a regular reference file reffile.



      The bash test builtin dereferences links, so test lnkfile -ot reffile compares the target of lnkfile, not the link itself.



      Is there a way to make the test builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?










      share|improve this question
















      I want to check whether link lnkfile is older than a regular reference file reffile.



      The bash test builtin dereferences links, so test lnkfile -ot reffile compares the target of lnkfile, not the link itself.



      Is there a way to make the test builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?







      bash shell-script symlink timestamps






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 4 hours ago









      Jeff Schaller

      39.7k1054126




      39.7k1054126










      asked 5 hours ago









      L. LevrelL. Levrel

      1,167412




      1,167412






















          2 Answers
          2






          active

          oldest

          votes


















          2














          As far as I know, bash doesn't offer any versions of -ot (and the like) which avoid dereferencing symlinks.



          What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L) and compare their mtime epochs numerically:



          if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
          # lnkfile is older
          fi





          share|improve this answer































            0














            I don't think there is a way with test, but you could use find.



            test "$(find lnkfile ! -newer reffile)" && command


            Here, find returns output if lnkfile is older than reffile. test without an option is equivalent to test -n. This is true if the length of the string is nonzero. Hence, if there is output from find, command is executed.






            share|improve this answer


























            • What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

              – Kusalananda
              4 hours ago













            • @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

              – Sparhawk
              4 hours ago













            • I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

              – Kusalananda
              3 hours ago











            • @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

              – Sparhawk
              2 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%2f495864%2fcomparing-the-time-of-a-symlink%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














            As far as I know, bash doesn't offer any versions of -ot (and the like) which avoid dereferencing symlinks.



            What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L) and compare their mtime epochs numerically:



            if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
            # lnkfile is older
            fi





            share|improve this answer




























              2














              As far as I know, bash doesn't offer any versions of -ot (and the like) which avoid dereferencing symlinks.



              What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L) and compare their mtime epochs numerically:



              if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
              # lnkfile is older
              fi





              share|improve this answer


























                2












                2








                2







                As far as I know, bash doesn't offer any versions of -ot (and the like) which avoid dereferencing symlinks.



                What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L) and compare their mtime epochs numerically:



                if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
                # lnkfile is older
                fi





                share|improve this answer













                As far as I know, bash doesn't offer any versions of -ot (and the like) which avoid dereferencing symlinks.



                What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L) and compare their mtime epochs numerically:



                if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
                # lnkfile is older
                fi






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 5 hours ago









                Chris DownChris Down

                79.7k14188202




                79.7k14188202

























                    0














                    I don't think there is a way with test, but you could use find.



                    test "$(find lnkfile ! -newer reffile)" && command


                    Here, find returns output if lnkfile is older than reffile. test without an option is equivalent to test -n. This is true if the length of the string is nonzero. Hence, if there is output from find, command is executed.






                    share|improve this answer


























                    • What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

                      – Kusalananda
                      4 hours ago













                    • @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

                      – Sparhawk
                      4 hours ago













                    • I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

                      – Kusalananda
                      3 hours ago











                    • @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

                      – Sparhawk
                      2 hours ago
















                    0














                    I don't think there is a way with test, but you could use find.



                    test "$(find lnkfile ! -newer reffile)" && command


                    Here, find returns output if lnkfile is older than reffile. test without an option is equivalent to test -n. This is true if the length of the string is nonzero. Hence, if there is output from find, command is executed.






                    share|improve this answer


























                    • What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

                      – Kusalananda
                      4 hours ago













                    • @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

                      – Sparhawk
                      4 hours ago













                    • I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

                      – Kusalananda
                      3 hours ago











                    • @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

                      – Sparhawk
                      2 hours ago














                    0












                    0








                    0







                    I don't think there is a way with test, but you could use find.



                    test "$(find lnkfile ! -newer reffile)" && command


                    Here, find returns output if lnkfile is older than reffile. test without an option is equivalent to test -n. This is true if the length of the string is nonzero. Hence, if there is output from find, command is executed.






                    share|improve this answer















                    I don't think there is a way with test, but you could use find.



                    test "$(find lnkfile ! -newer reffile)" && command


                    Here, find returns output if lnkfile is older than reffile. test without an option is equivalent to test -n. This is true if the length of the string is nonzero. Hence, if there is output from find, command is executed.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 2 hours ago

























                    answered 5 hours ago









                    SparhawkSparhawk

                    9,48263992




                    9,48263992













                    • What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

                      – Kusalananda
                      4 hours ago













                    • @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

                      – Sparhawk
                      4 hours ago













                    • I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

                      – Kusalananda
                      3 hours ago











                    • @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

                      – Sparhawk
                      2 hours ago



















                    • What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

                      – Kusalananda
                      4 hours ago













                    • @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

                      – Sparhawk
                      4 hours ago













                    • I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

                      – Kusalananda
                      3 hours ago











                    • @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

                      – Sparhawk
                      2 hours ago

















                    What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

                    – Kusalananda
                    4 hours ago







                    What test implementation do you have that does not have -n? It's a standard option... Also quote the command substitution.

                    – Kusalananda
                    4 hours ago















                    @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

                    – Sparhawk
                    4 hours ago







                    @Kusalananda I'm just confirming that no options is identical to -n, so it's easier to grep the man. Good point with the quote. Thanks.

                    – Sparhawk
                    4 hours ago















                    I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

                    – Kusalananda
                    3 hours ago





                    I misunderstood what you were saying about -n and read it as "there is no -n option" instead of "test without an option is the same as test -n".

                    – Kusalananda
                    3 hours ago













                    @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

                    – Sparhawk
                    2 hours ago





                    @Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.

                    – Sparhawk
                    2 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%2f495864%2fcomparing-the-time-of-a-symlink%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

                    Accessing regular linux commands in Huawei's Dopra Linux

                    Can't connect RFCOMM socket: Host is down

                    Kernel panic - not syncing: Fatal Exception in Interrupt