为什么这个bash for loop慢?

时间:2013-07-13 08:42:50

标签: bash for-loop

我正在尝试这段代码:

for f in jobs/UPDTEST/apples* ; do
    nf=`echo $f | sed s:jobs\/::g`
    echo $nf | tr '_' ' '
done > jobs

有750 apples*种类型的文字文件。但由于我只是弄乱了文件名 - 我本以为它应该很快 - 但需要大约5分钟。

有没有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用${parameter/pattern/string}之类sed来摆脱对trfor f in jobs/UPDTEST/apples*; do f=${f//jobs\//} echo ${f//_/ } done > jobs 的调用。在你的情况下,它可能看起来像:

{{1}}

答案 1 :(得分:1)

首先,cd jobs将不再需要sed

其次,您不需要tr替换bash变量值中的字符。

第三,使用find,您根本不需要循环。

f=$(cd jobs; find UPDTEST -name 'apples*' -depth 1)
echo "${f//_/ }" > jobs.log

顺便说一句,您不能在同一目录中拥有jobs目录和jobs文件。