How to compare two dates in bash script?












0















I am trying to compare todays date with the last modified date from a file.



DATE=$(date +"%F")

LASTMOD=$(stat $i -c %y);
LASTMOD_DATE=$(cut -d' ' -f1 <<<"$LASTMOD")

if [ "$LASTMOD_DATE" -ge "$DATE" ]; then
printf "%-19s | " "$DATE"
else
printf "%-19s | " "NO RECENT MOD"
fi


Currently this does not compare them properly and I think it's because LASTMOD_DATE is not actually a datetime so I get the error: "integer expression expected".










share|improve this question







New contributor




Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    0















    I am trying to compare todays date with the last modified date from a file.



    DATE=$(date +"%F")

    LASTMOD=$(stat $i -c %y);
    LASTMOD_DATE=$(cut -d' ' -f1 <<<"$LASTMOD")

    if [ "$LASTMOD_DATE" -ge "$DATE" ]; then
    printf "%-19s | " "$DATE"
    else
    printf "%-19s | " "NO RECENT MOD"
    fi


    Currently this does not compare them properly and I think it's because LASTMOD_DATE is not actually a datetime so I get the error: "integer expression expected".










    share|improve this question







    New contributor




    Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      0












      0








      0








      I am trying to compare todays date with the last modified date from a file.



      DATE=$(date +"%F")

      LASTMOD=$(stat $i -c %y);
      LASTMOD_DATE=$(cut -d' ' -f1 <<<"$LASTMOD")

      if [ "$LASTMOD_DATE" -ge "$DATE" ]; then
      printf "%-19s | " "$DATE"
      else
      printf "%-19s | " "NO RECENT MOD"
      fi


      Currently this does not compare them properly and I think it's because LASTMOD_DATE is not actually a datetime so I get the error: "integer expression expected".










      share|improve this question







      New contributor




      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      I am trying to compare todays date with the last modified date from a file.



      DATE=$(date +"%F")

      LASTMOD=$(stat $i -c %y);
      LASTMOD_DATE=$(cut -d' ' -f1 <<<"$LASTMOD")

      if [ "$LASTMOD_DATE" -ge "$DATE" ]; then
      printf "%-19s | " "$DATE"
      else
      printf "%-19s | " "NO RECENT MOD"
      fi


      Currently this does not compare them properly and I think it's because LASTMOD_DATE is not actually a datetime so I get the error: "integer expression expected".







      bash shell-script date






      share|improve this question







      New contributor




      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 30 mins ago









      AustinAustin

      1




      1




      New contributor




      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Austin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          2 Answers
          2






          active

          oldest

          votes


















          0














          You can use the timestamp format date +%s and the -r option.



          -r, --reference=FILE
          display the last modification time of FILE


          like



          if [ $(date +%s -r file) -ge $(date +%s) ]; then 
          # do something
          fi





          share|improve this answer































            0














            The best way to compare points of time (dates) is in seconds (since Epoch).



            Changing the %y to %Y for stat will give the modification date of the file in seconds:



            fileModifiedOn=$(stat $i -c %y)


            Today's date could be read either with (GNU) date with the format %s:



            todayDate=$(date +'%s')


            or, in Bash 5.0, with the variable epochseconds:



            todayDate=$EPOCHSECONDS


            or, in older bash, with a (buildin) printf format:



            todayDate=$(printf '%(%s)T')


            Then, it is just a matter of a simple integer comparison:



            if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
            result=$todayDate
            else
            result="NO RECENT MOD"
            fi

            printf "%-19s | " "$result"




            share























              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
              });


              }
              });






              Austin is a new contributor. Be nice, and check out our Code of Conduct.










              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f502208%2fhow-to-compare-two-dates-in-bash-script%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









              0














              You can use the timestamp format date +%s and the -r option.



              -r, --reference=FILE
              display the last modification time of FILE


              like



              if [ $(date +%s -r file) -ge $(date +%s) ]; then 
              # do something
              fi





              share|improve this answer




























                0














                You can use the timestamp format date +%s and the -r option.



                -r, --reference=FILE
                display the last modification time of FILE


                like



                if [ $(date +%s -r file) -ge $(date +%s) ]; then 
                # do something
                fi





                share|improve this answer


























                  0












                  0








                  0







                  You can use the timestamp format date +%s and the -r option.



                  -r, --reference=FILE
                  display the last modification time of FILE


                  like



                  if [ $(date +%s -r file) -ge $(date +%s) ]; then 
                  # do something
                  fi





                  share|improve this answer













                  You can use the timestamp format date +%s and the -r option.



                  -r, --reference=FILE
                  display the last modification time of FILE


                  like



                  if [ $(date +%s -r file) -ge $(date +%s) ]; then 
                  # do something
                  fi






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 11 mins ago









                  FreddyFreddy

                  3898




                  3898

























                      0














                      The best way to compare points of time (dates) is in seconds (since Epoch).



                      Changing the %y to %Y for stat will give the modification date of the file in seconds:



                      fileModifiedOn=$(stat $i -c %y)


                      Today's date could be read either with (GNU) date with the format %s:



                      todayDate=$(date +'%s')


                      or, in Bash 5.0, with the variable epochseconds:



                      todayDate=$EPOCHSECONDS


                      or, in older bash, with a (buildin) printf format:



                      todayDate=$(printf '%(%s)T')


                      Then, it is just a matter of a simple integer comparison:



                      if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
                      result=$todayDate
                      else
                      result="NO RECENT MOD"
                      fi

                      printf "%-19s | " "$result"




                      share




























                        0














                        The best way to compare points of time (dates) is in seconds (since Epoch).



                        Changing the %y to %Y for stat will give the modification date of the file in seconds:



                        fileModifiedOn=$(stat $i -c %y)


                        Today's date could be read either with (GNU) date with the format %s:



                        todayDate=$(date +'%s')


                        or, in Bash 5.0, with the variable epochseconds:



                        todayDate=$EPOCHSECONDS


                        or, in older bash, with a (buildin) printf format:



                        todayDate=$(printf '%(%s)T')


                        Then, it is just a matter of a simple integer comparison:



                        if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
                        result=$todayDate
                        else
                        result="NO RECENT MOD"
                        fi

                        printf "%-19s | " "$result"




                        share


























                          0












                          0








                          0







                          The best way to compare points of time (dates) is in seconds (since Epoch).



                          Changing the %y to %Y for stat will give the modification date of the file in seconds:



                          fileModifiedOn=$(stat $i -c %y)


                          Today's date could be read either with (GNU) date with the format %s:



                          todayDate=$(date +'%s')


                          or, in Bash 5.0, with the variable epochseconds:



                          todayDate=$EPOCHSECONDS


                          or, in older bash, with a (buildin) printf format:



                          todayDate=$(printf '%(%s)T')


                          Then, it is just a matter of a simple integer comparison:



                          if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
                          result=$todayDate
                          else
                          result="NO RECENT MOD"
                          fi

                          printf "%-19s | " "$result"




                          share













                          The best way to compare points of time (dates) is in seconds (since Epoch).



                          Changing the %y to %Y for stat will give the modification date of the file in seconds:



                          fileModifiedOn=$(stat $i -c %y)


                          Today's date could be read either with (GNU) date with the format %s:



                          todayDate=$(date +'%s')


                          or, in Bash 5.0, with the variable epochseconds:



                          todayDate=$EPOCHSECONDS


                          or, in older bash, with a (buildin) printf format:



                          todayDate=$(printf '%(%s)T')


                          Then, it is just a matter of a simple integer comparison:



                          if [[ "$fileModifiedOn" -gt "$todayDate" ]] then
                          result=$todayDate
                          else
                          result="NO RECENT MOD"
                          fi

                          printf "%-19s | " "$result"





                          share











                          share


                          share










                          answered 29 secs ago









                          IsaacIsaac

                          12k11852




                          12k11852






















                              Austin is a new contributor. Be nice, and check out our Code of Conduct.










                              draft saved

                              draft discarded


















                              Austin is a new contributor. Be nice, and check out our Code of Conduct.













                              Austin is a new contributor. Be nice, and check out our Code of Conduct.












                              Austin is a new contributor. Be nice, and check out our Code of Conduct.
















                              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%2f502208%2fhow-to-compare-two-dates-in-bash-script%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

                              CARDNET

                              Boot-repair Failure: Unable to locate package grub-common:i386

                              濃尾地震