On Mon, Jul 01, 2019 at 08:33:18AM +0200, Johannes Sixt wrote:
> > If we are OK relying on rudimentary perl[1], then:
> >
> > perl -le "print((stat)[7]) for @ARGV"
>
> I'm fine with that. But then we should do the sort + head -n 1 at the
> same time. I can do that with a small script, but I'm sure it's possible
> in a one-liner...
Something like:
perl -le 'print((sort { $a <=> $b } map { (stat)[7] } @ARGV)[0])'
but that is getting pretty unreadable. If we rely on List::Util, it's a
bit nicer:
perl -MList::Util=min -e 'print min(map { (stat)[7] } @ARGV)'
but that implies perl v5.7.3. Which is from 2002, and older than our
usual minimum-perl version, but we've typically been very conservative
with these one-liners, since they do not respect NO_PERL.
Probably writing it out like:
perl -le '
my @sizes = map { (stat)[7] } @ARGV;
@sizes = sort { $a <=> $b } @sizes;
print $size[0];
'
would be better (and makes "3rd-smallest" a trivial change).
I see Gábor suggested using "wc -c" elsewhere in the thread. That would
be fine with me, too, though I think the required sed there may be
getting pretty unreadable, too. :)
-Peff