0

我有这个命令

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的文件大小...

4

1 回答 1

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

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

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

于 2013-10-21T14:46:13.237 回答