2013-10-21 34 views
0

我有这个命令Unix的ls命令循环性能

for i in {0..1000}; do ls -Falh /foo/ | grep bar.$i | tr -s " " | cut -d " " -f 5

人数0..1000仅用于测试,但它可以从0到67864例如...此命令工作,但显然这是慢下来......有没有更好的方式在更短的时间内执行此操作?大约需要6秒钟来列出我编辑的1000循环 以获取更多信息。

我想要的是检索n该命令,并将该行插入到一个数组(我正在使用java),因此每行将有"foo" => commandoutput" 它必须返回是每个文件的第五(第5)列返回...例如像

4,0K 
4,0K 
933 
1,2K 
6 
2,2K 
428 
428 
428 
428 
428 
428 
428 
2,2K 
6 
2,2K 
4,0K 
4,0K 
109K 
0 
0 

这个问题不输出,其实我已经成功地使用awk '{print $5}'而不是做tr|cutls命令是缓慢的,因为有吨的循环......那么什么我想要一个更快的方式来获得第五(第五)列,其中ls -Falh显示文件大小...

+14

我投票解释你想达到什么目的,而不是破译管道。 – Birei

+0

看起来像她想在'/ foo /'的文件中grep多个模式'bar。{0..791}',然后显示第五个字段(由若干空格分隔的字段)。 –

+0

我们是否需要每次都打电话给ls?排序重要吗? – Basilevs

回答

2
find /tmp/ -maxdepth 1 -name bar.\* -printf "%f %k\\n" | cut -d . -f 2|sort -n | awk '$1 > 0 && $1 < 791 { print $2 }' 

查找打印文件名和大小是千字节,切除文件名的非数字部分,对数值部分进行排序,awk进行数字分析和打印大小。

看来你不需要排序,所以你可以从管道中删除排序。

+0

这个命令能输出MB/GB/TB的文件大小吗?因为我正在处理大小为+ 10TB的文件 –

+0

查找不到,但awk可以以任何您喜欢的方式处理$ 2数字。 – Basilevs