我有这个命令
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
显示文件大小...
答案 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进行数字分析并打印大小。
您似乎不需要排序,因此您只需从管道中删除排序。