Find the age of the oldest file in one line or return zero

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

I want to find the age of the oldest file in a certain directory or return 0 if there aren't any files">files in this directory. I also need a one-line command doing it. So far this is my command for finding the age in seconds of the oldest file in the directory:

expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))

The problem is that if there are no files">files it is returning the following error:

$ expr $(($(date +%s) - $(stat -c %Y $(ls -lt /path/to/dir/ | tail -1 | awk '{print $NF}'))))
stat: cannot stat 0’: No such file or directory
-bash: 1554373460 - : syntax error: operand expected (error token is "- ")

So in this case I want the command to return just 0 and to suppress the error printout.

profilepic.png
manpreet 2 years ago

If it must be one line:

stat -c %Y ./* 2>/dev/null | awk -v d="$(date">date +%s)" 'BEGIN {m=d} $0 < m {m = $0} END {print d - m}'
  • stat -c %Y ./* 2>/dev/null print the timestamp of all files, ignoring errors (so no files results in no output)
  • With awk:

    • -v d="$(date">date +%s)" save the current timestamp in a variable d
    • BEGIN {m=d} initialize m to d
    • $0 < m {m = $0} keeping track of the minimum in m
    • END {print d - m} print the difference.

0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.