Unix ls命令循环性能

时间:2013-10-21 14:30:41

标签: performance bash shell unix

我有这个命令

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

数字0..1000仅用于测试,但它可以从0到67864例如...这个命令正在运行但很明显它很慢......有没有更好的方法来执行此操作在更短的时间内行动?列出1000循环大约需要6秒钟 我编辑了解更多信息。

我想要的是检索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|cut,但是ls命令很慢,因为有很多循环...所以我想要的是一个更快的方法来获得第五(5)列,其中ls -Falh显示文件大小...

1 个答案:

答案 0 :(得分: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进行数字分析并打印大小。

您似乎不需要排序,因此您只需从管道中删除排序。