zsh-users
 help / color / mirror / code / Atom feed
From: rooom <rooom@prokonto.pl>
To: zsh-users@zsh.org
Subject: list last modified files
Date: Wed, 19 Aug 2015 23:59:24 +0200	[thread overview]
Message-ID: <6ac3d5e6.2de49d01.55d4fc3c.9415a@prokonto.pl> (raw)

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


             reply	other threads:[~2015-08-19 22:32 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-19 21:59 rooom [this message]
2015-08-19 23:16 ` Vin Shelton
2015-08-20  4:33 ` Bart Schaefer
2015-08-20  5:20   ` Mikael Magnusson
2015-08-20 13:08   ` rooom
2015-08-20 13:29     ` Peter Stephenson
2015-08-20 15:34       ` Bart Schaefer
2015-08-20 15:55         ` Peter Stephenson
2015-08-20 17:13           ` Bart Schaefer
     [not found]         ` <20150820165552.2b5ec817__22391.7863135741$1440086232$gmane$org@pwslap01u.europe.root.pri>
2015-08-20 16:42           ` Stephane Chazelas
2015-08-20 17:09             ` Bart Schaefer
2015-08-23 20:35     ` ZLE: missing edit-buffer widget rooom
2015-08-23 21:45       ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6ac3d5e6.2de49d01.55d4fc3c.9415a@prokonto.pl \
    --to=rooom@prokonto.pl \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).