我正在尝试这段代码:
for f in jobs/UPDTEST/apples* ; do
nf=`echo $f | sed s:jobs\/::g`
echo $nf | tr '_' ' '
done > jobs
有 750 个apples*
类型的文本文件。但因为我只是弄乱了文件名——我原以为它应该很快——但大约需要 5 分钟。
有没有其他方法可以做到这一点?
您可以使用参数扩展${parameter/pattern/string}
来摆脱对和的sed
调用tr
。在你的情况下,它可能看起来像:
for f in jobs/UPDTEST/apples*; do
f=${f//jobs\//}
echo ${f//_/ }
done > jobs
首先,cd jobs
将消除对sed
其次,您不需要tr
在 bash 变量的值中替换字符。
第三,find
你根本不需要循环。
f=$(cd jobs; find UPDTEST -name 'apples*' -depth 1)
echo "${f//_/ }" > jobs.log
顺便说一句,您不能在同一目录中拥有jobs
目录和jobs
文件。