http://qs321.pair.com?node_id=637271


in reply to Command line file sorting

well artist gave essentially a un*x golf solution. I'll recast it and comment on a couple tricks.

first 'echo */' (or print) is a good way of getting directories if you are using a posix shell.

% echo dir*/ | xargs -n1 | sort -rnt- -k2,3 | perl -lne 'print if $. = +=2'

the 'echo */ | xargs -n1' can be seen as a poor man's transpose. It is useful if you know your paths! spaces don't work directly ...and xargs understands some quoting

In the end it is safer to use:

% NL=' > ' % (IFS="$NL"; for i in dir*/; do echo $i; done) | > sort -rnt- -k2,3 | perl -lne 'print if $. ==2' % steph@ape (/home/stephan/t) % % cat dirdata dir-100-1 dir-100-10 dir-100-2 dir-100-9 dir-100-99 dir-2-1 dir-28-1 dir-29-1 dir-29-2 dir-30-1 dir-3-1 % steph@ape (/home/stephan/t) % % cat dirdata | sort -nt- -k2,3 dir-2-1 dir-3-1 dir-28-1 dir-29-1 dir-29-2 dir-30-1 dir-100-1 dir-100-10 dir-100-2 dir-100-9 dir-100-99 % steph@ape (/home/stephan/t) % % cat dirdata | sort -rnt- -k2,3 | perl -lne 'print if $. == 2' dir-100-9
cheers --stephan