Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

list last modified files


I'm trying to write a function which lists 10 most recent files from given sets (not only directories), something like trivial `alias lt=ls -lat | head -n 10`, but better.

It should work like

lt                              # list 10 recent files from .
lt dir                          # list 10 recent files from dir/
lt dir1 file1 dir2/file* dir3   # list 10 recent files from a given sum of inputs

Here is my solution so far, which I think is overcomplicated and iffy:

lt() {ls -Adlt -- "${^@:-.}"(Ne:'[[ -d $REPLY ]] && reply=($REPLY/*(DNomon[1,10])) || true':) | head -n 10}

Here how it should work:
For each argument check if it is directory, and in that case return 10 most recent modified files from that directory, then add other arguments to the list (files) and ignore all non-file arguments (N). After all pass generated set to the 'ls' command which sorts it on modification time and finally pass to 'head -n 10'.

Several question:

1. First of all I cannot understand why do I need a command "true" to list properly arguments which are  not directories. I can put there other command as well like 'echo >/dev/null', but 'true' is simplest I could find (for example ':' doesn't work). From my basic understanding no command should be needed to properly handle 'lt file'.

2. I would like to get rid of external `head -n 10` command and use glob qualifiers instead, but as you can see there are already two nested qualifier lists, and I can't see a way to put one more after all of that just to take (om[1,10]).

3. When I run it with only non-existing files like 'lt nonexistingfile' then it prints single dot '.'. I would prefer to print error from 'ls' command like "ls: cannot access...". Note that I cannot remove (N) qualifier because zsh steps in with its own errors - I want zsh to pass argument to 'ls' as it is in case it cannot find files.

Hope it's not too long,
thanks in advance

Messages sorted by: Reverse Date, Date, Thread, Author