2

我正在尝试这段代码:

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

有 750 个apples*类型的文本文件。但因为我只是弄乱了文件名——我原以为它应该很快——但大约需要 5 分钟。

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

4

2 回答 2

3

您可以使用参数扩展${parameter/pattern/string}来摆脱对和的sed调用tr。在你的情况下,它可能看起来像:

for f in jobs/UPDTEST/apples*; do
    f=${f//jobs\//}
    echo ${f//_/ }
done > jobs
于 2013-07-13T08:53:22.323 回答
1

首先,cd jobs将消除对sed

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

第三,find你根本不需要循环。

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

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

于 2013-07-13T08:58:12.590 回答