zsh-users
 help / color / mirror / code / Atom feed
From: DervishD <zsh@dervishd.net>
To: Zsh Users <zsh-users@sunsite.dk>
Subject: Sorting file names randomly
Date: Sat, 23 Jul 2005 21:42:40 +0200	[thread overview]
Message-ID: <20050723194240.GA32416@DervishD> (raw)

    Hi all :)

    A time ago (zsh-workers/19128) Bart explained me how to sort
randomly a group of files. Namely, the solution is this:

    array=(*(e:'reply=%0(l..$RANDOM)$REPLY:))
    array=(${(%)array)

    Just as a side note, this works because that %0... construct,
which is a prompt escape sequence, namely a conditional that says "if
more than 0 characters have been printed, print nothing, else print
the $RANDOM expansion). Obviously this is always false so the random
number is never printed but it is used for sorting.

    Well, the problem is that the above doesn't work if you have to
use more than one pattern, because the '(e' construct will affect
only the last element. Since I don't know how many elements will be
present, I cannot use an '(e' construct on each element. Moreover it
would be very messy.

    What I want to do is to generate (in an array) a list of files
sorted randomly, given some globbing patterns. Since the list can be
quite large, I think that doing the glob on the command line is not a
good idea, so I would call the function like:

    shuffle dir1/* dir2/* ...

    The globbing will be internal, so 'shuffle' is really an alias to
"noglob 'shuffle'".

    I've tried to use '$~' in the solution above (the '%0...' one),
but it doesn't work because although files in dir1 and files in dir2
are sorted randomly, dir1 files appear always before dir2 files. It
seems that the random number doesn't affect the sorting of pathnames
:?

    Any simple way of using the above solution for this new problem
or should I try a new solution? Any simple way of doing the random
sort on a group of patterns?

    Thanks a lot in advance :)

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...


             reply	other threads:[~2005-07-23 19:39 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-23 19:42 DervishD [this message]
2005-07-23 21:26 ` DervishD
2005-07-24  6:44   ` Bart Schaefer
2005-07-24  7:39     ` DervishD
2005-07-24  8:37     ` DervishD
2005-07-24  8:40       ` DervishD
2005-07-24 10:32         ` Bart Schaefer
2005-07-25  6:47           ` Bart Schaefer
2005-07-25 13:15           ` DervishD
2005-07-25 13:27           ` DervishD
2005-07-25 17:46             ` Bart Schaefer
2005-07-25 18:10               ` DervishD
2007-11-19  4:21     ` Clint Adams
2007-11-19  8:57       ` Bart Schaefer
2007-11-19  9:08         ` Bart Schaefer
2007-11-19 11:44         ` Clint Adams

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=20050723194240.GA32416@DervishD \
    --to=zsh@dervishd.net \
    --cc=zsh-users@sunsite.dk \
    /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).