As Vivian suggested, the
-t option of
ls tells it to sort files by modification time
(most recent first, by default; reversed if you add
This is most commonly used (at least in my experience) to sort the files in a directory,
but it can also be applied to a list of files on the command line.
And wildcards (“globs”) produce a list of files on the command line.
So, if you say
ls -t */file.php
it will list
domain3/file.php domain4/file.php domain2/file.php domain1/file.php
But, it you add the
-1 (dash one) option, or pipe this into anything,
it will list them one per line. So the command you want is
ls -t */file.php | sed 's|/file.php||'
This is an ordinary
s/old_string/replacement_string/ substitution in
| as the delimiter, because the
old_string contains a
and with an empty
(I.e., it deletes the filename and the
/ before it —
Of course, if you want the trailing
/ on the directory names,
sed 's|file.php||' or
If you want, add the
-l (lower-case L) option to
to get the long listing, including modification date/time.
And then you may want to enhance the
to strip out irrelevant information (like the mode, owner, and size of the file)
and, if you want, move the date/time after the directory name.
This will look into the directories that are in the current directory, and only them.
(This seems to be what the question is asking for.)
Doing a one-level scan of some other directory is a trivial variation:
ls -t /path/to/tld/*/file.php | sed 's|/file.php||'
To (recursively) search the entire directory tree under your current directory
(or some other top-level directory) is a little trickier.
Type the command
shopt -s globstar
and then replace the asterisk (
*) in one of the above commands with two asterisks (
ls -t **/file.php | sed 's|/file.php||'