[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ls -l|head seems to look at all files in directory
From: |
Jim Meyering |
Subject: |
Re: ls -l|head seems to look at all files in directory |
Date: |
Mon, 25 May 2009 16:19:18 +0200 |
Kamil Dudka wrote:
> On Monday 25 of May 2009 15:43:50 Reuben Thomas wrote:
>> Hi,
>>
>> If I do "ls -l |head" on a directory with many files in it, it takes a long
>> time to complete, suggesting that it has read the entire directory. Since
>> no sorting is involved, why has it done this?
>
> If you want to turn off sorting, try the -U option.
That's a good start.
To do what he wants you have to know that ls -1U is the only
way to get one output entry per readdir call.
Reuben, you want to do it like this:
ls -1U|head|xargs ls -l
Note the difference:
(#files, create time(s), time to list first 10(s))
$ for i in 10000 50000 100000 200000; do printf "$i "; mkdir $i &&
(cd $i && seq $i| env time --format %e xargs touch 2>&1 | tr '\n' ' ' ) &&
(cd $i && env time --format %e ls -lU|head>/dev/null) &&
(cd $i && seq $i|xargs rm -f); rmdir $i; done
10000 0.38 0.08
50000 1.92 0.37
100000 3.81 0.73
200000 7.60 1.47
$ for i in 10000 50000 100000 200000; do printf "$i "; mkdir $i &&
(cd $i && seq $i| env time --format %e xargs touch 2>&1 | tr '\n' ' ' &&
ls -1U|head|env time --format %e xargs ls -l>/dev/null &&
seq $i|xargs rm -f) && rmdir $i; done
10000 0.39 0.00
50000 1.91 0.00
100000 3.81 0.00
200000 7.63 0.00
- ls -l|head seems to look at all files in directory, Reuben Thomas, 2009/05/25
- Re: ls -l|head seems to look at all files in directory, Pádraig Brady, 2009/05/25
- Re: ls -l|head seems to look at all files in directory, Jim Meyering, 2009/05/25
- Re: ls -l|head seems to look at all files in directory, Reuben Thomas, 2009/05/25
- Re: ls -l|head seems to look at all files in directory, Jim Meyering, 2009/05/25