Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
list last modified files
- X-seq: zsh-users 20434
- From: rooom <rooom@xxxxxxxxxxx>
- To: zsh-users@xxxxxxx
- Subject: list last modified files
- Date: Wed, 19 Aug 2015 23:59:24 +0200
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
Hi,
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