zsh-users
 help / color / mirror / code / Atom feed
* Sorting files
@ 2005-08-04 18:38 Meino Christian Cramer
  2005-08-04 18:48 ` Mikael Magnusson
                   ` (3 more replies)
  0 siblings, 4 replies; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-04 18:38 UTC (permalink / raw)
  To: zsh-users


Hi,

 I played around with combinations including expressions like
 **/*(.,oL) trying to get a listing of all files found !including
 those of the subdirectories! sorted by their size. I want one big
 listing sorted "once" -- but I got "seperated" parts sorted each for
 themselves. 

 I would understand this, if I had submitted something like:

   print -l **/*(oL) 

 which includes directories due to the missing ".", but when I submit:

   print -l **/*(.,oL)

 I would expect "all files sorted by their size".

 But as always, the problem is probably caused by the person sitting
 right in front of my monitor, I fear ;)

 Is there a way to get one big listing starting with the smallest file
 of all files found (including those in the subdirectories) and ending
 with the largest one? ...without the conventional way of slowly
 smokeing a sort-pipe ?

 Thanks a lot in advance for any help or hint ! :O)

 Keep zshing!
 Meino


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 18:38 Sorting files Meino Christian Cramer
@ 2005-08-04 18:48 ` Mikael Magnusson
  2005-08-04 19:10   ` Meino Christian Cramer
  2005-08-04 19:14 ` Christian Schneider
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 19+ messages in thread
From: Mikael Magnusson @ 2005-08-04 18:48 UTC (permalink / raw)
  To: zsh-users

On 8/4/05, Meino Christian Cramer <Meino.Cramer@gmx.de> wrote:
> 
> Hi,
> 
>  I played around with combinations including expressions like
>  **/*(.,oL) trying to get a listing of all files found !including
>  those of the subdirectories! sorted by their size. I want one big
>  listing sorted "once" -- but I got "seperated" parts sorted each for
>  themselves.
> 
>  I would understand this, if I had submitted something like:
> 
>    print -l **/*(oL)
> 
>  which includes directories due to the missing ".", but when I submit:
> 
>    print -l **/*(.,oL)
> 
>  I would expect "all files sorted by their size".
> 
>  But as always, the problem is probably caused by the person sitting
>  right in front of my monitor, I fear ;)
> 
>  Is there a way to get one big listing starting with the smallest file
>  of all files found (including those in the subdirectories) and ending
>  with the largest one? ...without the conventional way of slowly
>  smokeing a sort-pipe ?
> 
>  Thanks a lot in advance for any help or hint ! :O)
> 
>  Keep zshing!
>  Meino

>From the manpage,

o      specifies how the names of the files should be sorted.
              if d, files in subdirectories appear before those
              in  the  current  directory at each level of the search
-- this is best com-
              bined with other criteria, for example `odon' to sort 
on  names  for files
              within  the  same  directory.

I think that is what you want, but i'm not sure with that description :)
ie, print -l **/*(.,odL)

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 18:48 ` Mikael Magnusson
@ 2005-08-04 19:10   ` Meino Christian Cramer
  2005-08-04 19:18     ` Danek Duvall
  0 siblings, 1 reply; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-04 19:10 UTC (permalink / raw)
  To: mikachu; +Cc: zsh-users

From: Mikael Magnusson <mikachu@gmail.com>
Subject: Re: Sorting files
Date: Thu, 4 Aug 2005 20:48:00 +0200

> On 8/4/05, Meino Christian Cramer <Meino.Cramer@gmx.de> wrote:
> > 
> > Hi,
> > 
> >  I played around with combinations including expressions like
> >  **/*(.,oL) trying to get a listing of all files found !including
> >  those of the subdirectories! sorted by their size. I want one big
> >  listing sorted "once" -- but I got "seperated" parts sorted each for
> >  themselves.
> > 
> >  I would understand this, if I had submitted something like:
> > 
> >    print -l **/*(oL)
> > 
> >  which includes directories due to the missing ".", but when I submit:
> > 
> >    print -l **/*(.,oL)
> > 
> >  I would expect "all files sorted by their size".
> > 
> >  But as always, the problem is probably caused by the person sitting
> >  right in front of my monitor, I fear ;)
> > 
> >  Is there a way to get one big listing starting with the smallest file
> >  of all files found (including those in the subdirectories) and ending
> >  with the largest one? ...without the conventional way of slowly
> >  smokeing a sort-pipe ?
> > 
> >  Thanks a lot in advance for any help or hint ! :O)
> > 
> >  Keep zshing!
> >  Meino
> 
> >From the manpage,
> 
> o      specifies how the names of the files should be sorted.
>               if d, files in subdirectories appear before those
>               in  the  current  directory at each level of the search
> -- this is best com-
>               bined with other criteria, for example `odon' to sort 
> on  names  for files
>               within  the  same  directory.
> 
> I think that is what you want, but i'm not sure with that description :)
> ie, print -l **/*(.,odL)

  Hi Mikael ! 

  Thanks for reply ! :O)

  print -l **/*(.,odL) gives (zsh 4.2.5, Linux 2.6.12.3) 

		zsh: number expected
		
  ?

  Now I am totally confused.... X-)

  Happy zshing!
  Meino
 
> -- 
> Mikael Magnusson
> 


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 18:38 Sorting files Meino Christian Cramer
  2005-08-04 18:48 ` Mikael Magnusson
@ 2005-08-04 19:14 ` Christian Schneider
  2005-08-04 21:19   ` Jens Kubieziel
  2005-08-05  3:06   ` Meino Christian Cramer
  2005-08-04 19:51 ` Christian Taylor
  2005-08-05 12:52 ` DervishD
  3 siblings, 2 replies; 19+ messages in thread
From: Christian Schneider @ 2005-08-04 19:14 UTC (permalink / raw)
  To: zsh-users

* Meino Christian Cramer <Meino.Cramer@gmx.de> typed:
[...]
>  Is there a way to get one big listing starting with the smallest file
>  of all files found (including those in the subdirectories) and ending
>  with the largest one? ...without the conventional way of slowly
>  smokeing a sort-pipe ?

$ ls -fl ./**/*(OL)
or
$ zmodload zsh/stat
$ ls -fld ./**/*(d`stat +device .`OL)
-- 
http://www.strcat.de/zsh/#features [*] Christian 'strcat' Schneider
http://www.strcat.de/zsh/#tipps    [*] Email.......: strcat@gmx.net
http://www.strcat.de/zsh/#modex    [*] GPG-ID......:       47E322CE
http://www.strcat.de/zsh/#links    [*] [zsh - the Z shell]


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 19:10   ` Meino Christian Cramer
@ 2005-08-04 19:18     ` Danek Duvall
  2005-08-04 20:41       ` Stephane Chazelas
  0 siblings, 1 reply; 19+ messages in thread
From: Danek Duvall @ 2005-08-04 19:18 UTC (permalink / raw)
  To: Meino Christian Cramer; +Cc: zsh-users

Does

    print -l **/*(.oL)

not do what you want?

Danek


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 18:38 Sorting files Meino Christian Cramer
  2005-08-04 18:48 ` Mikael Magnusson
  2005-08-04 19:14 ` Christian Schneider
@ 2005-08-04 19:51 ` Christian Taylor
  2005-08-05 10:51   ` zzapper
  2005-08-05 12:52 ` DervishD
  3 siblings, 1 reply; 19+ messages in thread
From: Christian Taylor @ 2005-08-04 19:51 UTC (permalink / raw)
  To: zsh-users

Meino Christian Cramer wrote:
> Hi,
>
>  I played around with combinations including expressions like
>  **/*(.,oL) trying to get a listing of all files found !including
>  those of the subdirectories! sorted by their size. I want one big
>  listing sorted "once" -- but I got "seperated" parts sorted each for
>  themselves.
>
>  I would understand this, if I had submitted something like:
>
>    print -l **/*(oL)
>
>  which includes directories due to the missing ".", but when I submit:
>
>    print -l **/*(.,oL)
>
>  I would expect "all files sorted by their size".

If I'm not mistaken, this means "match everything that is either a regular 
file OR ANYTHING, and sort by size", because of the comma in the glob 
qualifier. Omitting it should do the trick:

print -l **/*(.oL)

lg,
Christian


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 19:18     ` Danek Duvall
@ 2005-08-04 20:41       ` Stephane Chazelas
  2005-08-05  3:01         ` Meino Christian Cramer
  0 siblings, 1 reply; 19+ messages in thread
From: Stephane Chazelas @ 2005-08-04 20:41 UTC (permalink / raw)
  To: Danek Duvall, Meino Christian Cramer, zsh-users

On Thu, Aug 04, 2005 at 12:18:16PM -0700, Danek Duvall wrote:
> Does
> 
>     print -l **/*(.oL)
> 
> not do what you want?
[...]

Should be:

print -rl -- **/*(.oL)

-- 
Stéphane


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 19:14 ` Christian Schneider
@ 2005-08-04 21:19   ` Jens Kubieziel
  2005-08-05  3:06   ` Meino Christian Cramer
  1 sibling, 0 replies; 19+ messages in thread
From: Jens Kubieziel @ 2005-08-04 21:19 UTC (permalink / raw)
  To: zsh-users

* Christian Schneider schrieb am 2005-08-04 um 21:14 Uhr:
> $ zmodload zsh/stat
> $ ls -fld ./**/*(d`stat +device .`OL)

There seems to be a bug with large files (Due I'm running out of
diskspace, I couldn't investigate more). Could you verify?

[...]
-rw-r--r--  1 jens jens         38 2004-02-20 19:19 ./mcdp-0.4/doc/AUTHOR
-rw-r--r--  1 jens jens         30 2005-06-06 17:09 ./shb/INSTALL
-rw-r--r--  1 jens jens         30 2005-04-11 22:13 ./shburn/INSTALL
-rw-r--r--  1 jens jens          0 2005-06-06 17:09 ./shb/shellburnrc
-rw-------  1 jens jens          0 2005-07-29 20:55 ./slides-2up.pdf
-rw-r--r--  1 jens jens 7408779264 2005-06-10 18:16 ./lop

-- 
Jens Kubieziel                                   http://www.kubieziel.de
FdI#246: Service Pack
Hauptnahrung bei Softwarebulemie. (Manfred Worm Schäfer)


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 20:41       ` Stephane Chazelas
@ 2005-08-05  3:01         ` Meino Christian Cramer
  2005-08-05 10:47           ` Stephane CHAZELAS
  0 siblings, 1 reply; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-05  3:01 UTC (permalink / raw)
  To: Stephane_Chazelas; +Cc: duvall, zsh-users

From: Stephane Chazelas <Stephane_Chazelas@yahoo.fr>
Subject: Re: Sorting files
Date: Thu, 4 Aug 2005 21:41:22 +0100

> On Thu, Aug 04, 2005 at 12:18:16PM -0700, Danek Duvall wrote:
> > Does
> > 
> >     print -l **/*(.oL)
> > 
> > not do what you want?
> [...]
> 
> Should be:
> 
> print -rl -- **/*(.oL)
> 
> -- 
> Stéphane
> 

This gave me no sorted output...sorry :O)

Meino


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 19:14 ` Christian Schneider
  2005-08-04 21:19   ` Jens Kubieziel
@ 2005-08-05  3:06   ` Meino Christian Cramer
  1 sibling, 0 replies; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-05  3:06 UTC (permalink / raw)
  To: strcat; +Cc: zsh-users

From: Christian Schneider <strcat@gmx.net>
Subject: Re: Sorting files
Date: Thu, 4 Aug 2005 21:14:42 +0200

Hi,

> * Meino Christian Cramer <Meino.Cramer@gmx.de> typed:
> [...]
> >  Is there a way to get one big listing starting with the smallest file
> >  of all files found (including those in the subdirectories) and ending
> >  with the largest one? ...without the conventional way of slowly
> >  smokeing a sort-pipe ?
> 
> $ ls -fl ./**/*(OL)

  ...this does not work for me...sorry... :)

> or
> $ zmodload zsh/stat
> $ ls -fld ./**/*(d`stat +device .`OL)

  This does...but, hmmmmm....I again need an "additional" tool
  (zsh/stat). Is the filesize something, which cannot be determined by
  the Shell alone ?

  Why does it seems, that any combination or contruction with oL,. and
  () does not work (until now)   ?

  keep zshing!
  Meino


> -- 
> http://www.strcat.de/zsh/#features [*] Christian 'strcat' Schneider
> http://www.strcat.de/zsh/#tipps    [*] Email.......: strcat@gmx.net
> http://www.strcat.de/zsh/#modex    [*] GPG-ID......:       47E322CE
> http://www.strcat.de/zsh/#links    [*] [zsh - the Z shell]
> 


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-05  3:01         ` Meino Christian Cramer
@ 2005-08-05 10:47           ` Stephane CHAZELAS
  0 siblings, 0 replies; 19+ messages in thread
From: Stephane CHAZELAS @ 2005-08-05 10:47 UTC (permalink / raw)
  To: Meino Christian Cramer; +Cc: duvall, zsh-users

On Fri, Aug 05, 2005 at 05:01:46AM +0200, Meino Christian Cramer wrote:
[...]
> > >     print -l **/*(.oL)
[...]
> > Should be:
> > 
> > print -rl -- **/*(.oL)
[...]
> This gave me no sorted output...sorry :O)


I was just pointing out that

print -l arbitrary list of file names

is not correct. print without -r is to print a text that is in
the form "text with \t \n... escape sequences" like in C string
constants. That's an old design error in shells inherited from
ksh to have that as the default behavior. For a correct way, see
perl for instance where \t, \n are expanded at the language
level (or by the double quotes if you like).

In perl,

$var = "\t"

assigns a <Tab> character to $var and print $var prints the
content of $var. ($var = '\t' assigns "\" and "t" to $var).

In shells,

var="\t"

assigns the "\" and "t" characters to $var and print "$var"
prints the expansion of the "\t" escape sequence, i.e. a <Tab>
character.

ksh93, bash and zsh have the cumbersome:

var=$'\t'

that does the same as perl's "\t", but print (and echo) are
still /broken/ and need the "-r" (and -n to prevent adding a
newline character) to print strings asis.


Without --, the list can be options or arguments, while you
definitely mean them to be arguments there.

Another annoying thing with print -l is that without arguments,
it still prints an empty line as if it had been given an empty
argument.

So that to print arguments one per line, you actually need:

correct_print-l() {
  (( $# == 0 )) || print -rl -- "$@"
}

or to be portable (POSIX):

correct_print_l() {
  [ "$#" -eq 0 ] || printf '%s\n' "$@"
}

-- 
Stephane


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 19:51 ` Christian Taylor
@ 2005-08-05 10:51   ` zzapper
  2005-08-05 12:57     ` Christian Taylor
                       ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: zzapper @ 2005-08-05 10:51 UTC (permalink / raw)
  To: zsh-users

On Thu, 4 Aug 2005 21:51:33 +0200,  wrote:

>Meino Christian Cramer wrote:
>> Hi,
>>
>>  I played around with combinations including expressions like
>>  **/*(.,oL) trying to get a listing of all files found !including
>>  those of the subdirectories! sorted by their size. I want one big
>>  listing sorted "once" -- but I got "seperated" parts sorted each for
>>  themselves.

Any chance of a summary of this interesting thread (assuming it's finished)?
-- 
zzapper
vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
http://www.rayninfo.co.uk/tips/ vim, zsh & success tips


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-04 18:38 Sorting files Meino Christian Cramer
                   ` (2 preceding siblings ...)
  2005-08-04 19:51 ` Christian Taylor
@ 2005-08-05 12:52 ` DervishD
  2005-08-05 14:01   ` Meino Christian Cramer
  3 siblings, 1 reply; 19+ messages in thread
From: DervishD @ 2005-08-05 12:52 UTC (permalink / raw)
  To: Meino Christian Cramer; +Cc: zsh-users

    Hi Meino :)

 * Meino Christian Cramer <Meino.Cramer@gmx.de> dixit:
>  I would understand this, if I had submitted something like:
>    print -l **/*(oL) 

    print -l -- **/*(.oL) works for me, tested in my root directory.
It's a good idea to use '-r' too, as suggested in the thread, just in
case there is any weird filename.

    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...


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-05 10:51   ` zzapper
@ 2005-08-05 12:57     ` Christian Taylor
  2005-08-05 14:41     ` Meino Christian Cramer
  2005-08-06  5:38     ` Summary: " Meino Christian Cramer
  2 siblings, 0 replies; 19+ messages in thread
From: Christian Taylor @ 2005-08-05 12:57 UTC (permalink / raw)
  To: zsh-users

zzapper wrote:
> >Meino Christian Cramer wrote:
> >>  I played around with combinations including expressions like
> >>  **/*(.,oL) trying to get a listing of all files found !including
> >>  those of the subdirectories! sorted by their size. I want one big
> >>  listing sorted "once" -- but I got "seperated" parts sorted each for
> >>  themselves.
>
> Any chance of a summary of this interesting thread (assuming it's
> finished)?

I don't know if the thread is finished yet, but I'll try to sum up the things 
I've learned so far. I'm no zsh expert, so pointing out errors would be much 
appreciated:

According to the user guide and the actual behaviour of zsh (4.2.5) on my 
system, this should do exactly what Meino wants, sorting all files by size 
"in one go" (files from different subdirectories mixed together):

print -l -- **/*(.oL)

However, Meino replied to a similar suggestion "This gave me no sorted 
output...sorry :O)" - unfortunately, I have no idea why this is so.

"print -l -- **/*(.,oL)" also sorts in one go, but unintentionally includes 
EVERYTHING, because no glob qualifier other than sorting is given after the 
comma ("match everything that is a regular file or anything at all").

The "od" sort option that was suggested puts files in subdirectories before 
those in the current directory at each level of the search. "Od" does the 
reverse.
The results of "**/*(.odoL)" seem a bit unexpected at first, because files of 
all subdirectories are mixed together, but still all files of every 
subdirectory appear before files in the respective parent directory, and the 
whole list is sorted by size as far as this constraint allows.
"**/*(.odL)" doesn't work - zsh interprets the L as the regular size glob 
qualifier with a missing size specification, because every sort qualifier has 
to be directly preceded by "o" or "O".
However, if I understood Meino's goal correctly, he'll want neither "od" nor 
"Od" in his glob qualifier.

That's about it, I hope this helps someone,
Christian


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-05 12:52 ` DervishD
@ 2005-08-05 14:01   ` Meino Christian Cramer
  2005-08-05 14:29     ` Mikael Magnusson
  0 siblings, 1 reply; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-05 14:01 UTC (permalink / raw)
  To: zsh; +Cc: zsh-users

From: DervishD <zsh@dervishd.net>
Subject: Re: Sorting files
Date: Fri, 5 Aug 2005 14:52:43 +0200

Hi Raúl !   :)

 (sorry, if your name comes out somehow -- hrmm -- "encrypted"...
 my Emacs seems to handle everything other than plain ascii a little 
 weird... ;)

 Hmmm...interesting.. as soon as you mailed me that it works for you
 my zsh seems to be that impressed, that s/he decided also to work
 correctly....mysterious ! ;O)

 More seriously... I dont know what's happening here. May be I
 mispelled an option or forget a "-" somewhere...

 More important: It WORKS ! :)   (even for me! ;)

 Another question in this context:
 To check the options, I had to construct this one:

    for i in  **/*(.oL) 
    do
		ls -ld $i
    done | less
 
 Is there any other more shorter way to achieve the same results with
 less code -- especially without calling any other "tool" like
 zsh/stat or xargs or such ? But I insist on getting filenames AND
 sizes ! ;O) Not only the filename should be shown!

 Ok, now this is more like a "coding contest" for me than a practical
 excurse....but I like to tune things :O))


 Have a nice weekend !
 Meino


 
 


>     Hi Meino :)
> 
>  * Meino Christian Cramer <Meino.Cramer@gmx.de> dixit:
> >  I would understand this, if I had submitted something like:
> >    print -l **/*(oL) 
> 
>     print -l -- **/*(.oL) works for me, tested in my root directory.
> It's a good idea to use '-r' too, as suggested in the thread, just in
> case there is any weird filename.
> 
>     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...
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-05 14:01   ` Meino Christian Cramer
@ 2005-08-05 14:29     ` Mikael Magnusson
  0 siblings, 0 replies; 19+ messages in thread
From: Mikael Magnusson @ 2005-08-05 14:29 UTC (permalink / raw)
  To: zsh, zsh-users

On 8/5/05, Meino Christian Cramer <Meino.Cramer@gmx.de> wrote:
> From: DervishD <zsh@dervishd.net>
> Subject: Re: Sorting files
> Date: Fri, 5 Aug 2005 14:52:43 +0200
> 
> Hi Raúl !   :)
> 
>  (sorry, if your name comes out somehow -- hrmm -- "encrypted"...
>  my Emacs seems to handle everything other than plain ascii a little
>  weird... ;)
> 
>  Hmmm...interesting.. as soon as you mailed me that it works for you
>  my zsh seems to be that impressed, that s/he decided also to work
>  correctly....mysterious ! ;O)
> 
>  More seriously... I dont know what's happening here. May be I
>  mispelled an option or forget a "-" somewhere...
> 
>  More important: It WORKS ! :)   (even for me! ;)
> 
>  Another question in this context:
>  To check the options, I had to construct this one:
> 
>     for i in  **/*(.oL)
>     do
>                 ls -ld $i
>     done | less
> 
>  Is there any other more shorter way to achieve the same results with
>  less code -- especially without calling any other "tool" like
>  zsh/stat or xargs or such ? But I insist on getting filenames AND
>  sizes ! ;O) Not only the filename should be shown!
> 
>  Ok, now this is more like a "coding contest" for me than a practical
>  excurse....but I like to tune things :O))
> 
> 
>  Have a nice weekend !
>  Meino

Maybe you want something as simple as the following?
ls -Ssh -- **/*(.)
That'll sort all the files in descending size order and show the
sizes. It will sort _all_ files by size, not just internally sort in
each subdirectory, maybe that was what you wanted and then this won't
help. Also obviously suffers from the too many arguments possibility.

-- 
Mikael Magnusson
ps
sorry if i messed up the cc and/or to fields, gmail really doesn't
want me to use mailing lists. When i hit Reply, it just replies to the
last person and not the list, and when i select Reply To All it puts
the person in To: and the list in Cc:, I'm not sure what I'm expected
to do, don't use mailing lists a lot.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Sorting files
  2005-08-05 10:51   ` zzapper
  2005-08-05 12:57     ` Christian Taylor
@ 2005-08-05 14:41     ` Meino Christian Cramer
  2005-08-06  5:38     ` Summary: " Meino Christian Cramer
  2 siblings, 0 replies; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-05 14:41 UTC (permalink / raw)
  To: david; +Cc: zsh-users

From: zzapper <david@tvis.co.uk>
Subject: Re: Sorting files
Date: Fri, 05 Aug 2005 11:51:15 +0100

> On Thu, 4 Aug 2005 21:51:33 +0200,  wrote:
> 
> >Meino Christian Cramer wrote:
> >> Hi,
> >>
> >>  I played around with combinations including expressions like
> >>  **/*(.,oL) trying to get a listing of all files found !including
> >>  those of the subdirectories! sorted by their size. I want one big
> >>  listing sorted "once" -- but I got "seperated" parts sorted each for
> >>  themselves.
> 
> Any chance of a summary of this interesting thread (assuming it's finished)?
> -- 
> zzapper
> vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
> http://www.rayninfo.co.uk/tips/ vim, zsh & success tips
> 
Of course...the end is near ;O)))

As soon as I think, that all is "visible" I will try summarize it.

Keep zshing!
Meino


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Summary: Sorting files
  2005-08-05 10:51   ` zzapper
  2005-08-05 12:57     ` Christian Taylor
  2005-08-05 14:41     ` Meino Christian Cramer
@ 2005-08-06  5:38     ` Meino Christian Cramer
  2005-08-06  9:22       ` Christian Taylor
  2 siblings, 1 reply; 19+ messages in thread
From: Meino Christian Cramer @ 2005-08-06  5:38 UTC (permalink / raw)
  To: david; +Cc: zsh-users

From: zzapper <david@tvis.co.uk>
Subject: Re: Sorting files
Date: Fri, 05 Aug 2005 11:51:15 +0100




*** PRELIMINARY DRAFT ***




Sorting files: Summary of traps and pitfalls 

To achieve more control over wildcards -- or should I better separate
"wild" from "cards" ;O) -- zsh has implemented "Glob qualifiers".

One of these "Glob Qualifiers" is "oL", which sorts all files matching
the wildcard. Example:   

	*.bz2(oL) 

will match all bzip2-compressed files in the current directory and
sort the list by the size of that files.

More interesting effects can be achieved, when "(oL)" is combined with
recursive globbing.

The wildcard

	**/*.bz2

will result in a list of all bzip2-compressed files in the current
directory and all subdirectories below.

So far so nice... ;O)

Now...what will be the result if one submit

	ls -l **/*.bz2(.oL)

? Confusion -- at least in my case... ;)

Beside the common "arg list too long" failure of ls, which appears,
when "**/*.bz2" simply will to match too many files, the output isn't
sorted the exspected way...

Why?

First **/*.bz2 will be evaluated. The result is a sorted (!) list of 
files. Then ls grabs that list and resorted it the standard way
(alphabetically), which destroy the sort done by (.oL).

One way around this trap is a "longer" script:

    for i in **/*bz2(.ol)
    do
      ls -l ${i}
    done

which won't give ls the chance of sorting anything, cause it only sees
one file at a time. The drawback is a call to ls on *every* file and a 
somehow bulky command.

If you get an "arg list to long"-error after submitting

   ls -l **/*bz2(.oL)

then the above script is a solution for that. But if not the following
does, what you want:

   ls -sS -- **/*.bz2(.)

Why?

"--" prevents ls from thinking of another option, if a filename starts
with a "-". "-s" let ls print the size of the file, "-S" sort the
files matching **/*.bz2(.) by its size.

Or in other words: (.oL) to sort files is not needed here and it seems
that in combination with recursive globbing plus ls it spend a lot of
confusion to its users (this is at least valid for me ;).

Keep zshing!
Meino


> On Thu, 4 Aug 2005 21:51:33 +0200,  wrote:
> 
> >Meino Christian Cramer wrote:
> >> Hi,
> >>
> >>  I played around with combinations including expressions like
> >>  **/*(.,oL) trying to get a listing of all files found !including
> >>  those of the subdirectories! sorted by their size. I want one big
> >>  listing sorted "once" -- but I got "seperated" parts sorted each for
> >>  themselves.
> 
> Any chance of a summary of this interesting thread (assuming it's finished)?
> -- 
> zzapper
> vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
> http://www.rayninfo.co.uk/tips/ vim, zsh & success tips
> 


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: Summary: Sorting files
  2005-08-06  5:38     ` Summary: " Meino Christian Cramer
@ 2005-08-06  9:22       ` Christian Taylor
  0 siblings, 0 replies; 19+ messages in thread
From: Christian Taylor @ 2005-08-06  9:22 UTC (permalink / raw)
  To: zsh-users

Meino Christian Cramer wrote:
> One way around this trap is a "longer" script:
>
>     for i in **/*bz2(.ol)
>     do
>       ls -l ${i}
>     done
>
> which won't give ls the chance of sorting anything, cause it only sees
> one file at a time. The drawback is a call to ls on *every* file and a
> somehow bulky command.
>
> If you get an "arg list to long"-error after submitting
>
>    ls -l **/*bz2(.oL)
>
> then the above script is a solution for that. But if not the following
> does, what you want:
>
>    ls -sS -- **/*.bz2(.)

As a compromise, I would suggest using the following:
(you need to autoload zargs first, either manually or in your .zshrc)

zargs -- **/*.bz2(.oL) -- ls -lU

This should work better than the for-loop because zargs calls ls with a few 
thousand arguments at a time, resulting in much fewer calls.
Although the manpage for ls claims that -U displays files without sorting, "in 
whatever order they are stored on the disk", on my system it displays them in 
the order of the arguments it is called with. Therefore, you can use any 
combination of sorting that zsh provides.

Christian


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2005-08-06  9:23 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-04 18:38 Sorting files Meino Christian Cramer
2005-08-04 18:48 ` Mikael Magnusson
2005-08-04 19:10   ` Meino Christian Cramer
2005-08-04 19:18     ` Danek Duvall
2005-08-04 20:41       ` Stephane Chazelas
2005-08-05  3:01         ` Meino Christian Cramer
2005-08-05 10:47           ` Stephane CHAZELAS
2005-08-04 19:14 ` Christian Schneider
2005-08-04 21:19   ` Jens Kubieziel
2005-08-05  3:06   ` Meino Christian Cramer
2005-08-04 19:51 ` Christian Taylor
2005-08-05 10:51   ` zzapper
2005-08-05 12:57     ` Christian Taylor
2005-08-05 14:41     ` Meino Christian Cramer
2005-08-06  5:38     ` Summary: " Meino Christian Cramer
2005-08-06  9:22       ` Christian Taylor
2005-08-05 12:52 ` DervishD
2005-08-05 14:01   ` Meino Christian Cramer
2005-08-05 14:29     ` Mikael Magnusson

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).