我正在尝试这段代码:
for f in jobs/UPDTEST/apples* ; do
nf=`echo $f | sed s:jobs\/::g`
echo $nf | tr '_' ' '
done > jobs
有750 apples*
种类型的文字文件。但由于我只是弄乱了文件名 - 我本以为它应该很快 - 但需要大约5分钟。
有没有其他方法可以做到这一点?
答案 0 :(得分:3)
您可以使用${parameter/pattern/string}
之类sed
来摆脱对tr
和for 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
文件。