Unix ls 命令循环性能



我有这个命令

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|cutls 命令很慢,因为有大量循环......所以我想要的是一种更快的方法来获取显示文件大小的第五(第 5 列)ls -Falh......

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

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

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

最新更新