java这种src与构建树时间戳的比较如何更快?
for n in `cd src; find . -name "*.java"; cd -`;
do a=`echo $n | cut -d '.' -f2`;
if [[ src/$a.java -nt build/$a.class ]];
then echo src/$a.java;
fi;
done
它列出了src树中的所有java文件;然后,对于每一个,它都删除后缀“.java”(cut -d '.' -f2
,因为find .
输出的前缀是.
)。然后,它使用-nt
测试src树中的java文件是否比构建树中相应的类文件更新;如果是较新的,则为输出。[javac然后可以使用它只编译所需的src文件,而不是使用ant
或make
]
问题是速度太慢,大约需要275毫秒。如何使它更快
或者在bash中有没有更快的方法?我看不出如何使用find
、diff
、rsync
或make
(它似乎不会自动遍历树,并且需要明确列出的源文件)
# 1 楼答案
ant执行智能构建逻辑,除非修改源代码,否则不会构建类
您可能还想了解一下SCON,它不是一个本机Java构建工具,但在编译高效的复杂构建树方面非常方便,而且也有Java builder
# 2 楼答案
试试这个:
# 3 楼答案
我不知道这种结构是否会更快,但可能值得一试:
while
表单可能不会提供任何提升。倒塌的if
可能会发生。正则表达式可能会提供一点贡献正如您所发现的,取消对
cut
的调用带来了最大的不同# 4 楼答案
采用kon的文件名搜索方法,平均速度从320毫秒提高到45毫秒。谢谢你,康
原来的现在慢了一点(原来是275ms;现在是320ms);我不知道为什么。我用的是同一条线。播放视频后可能会有不同的系统源
编辑重新开始的评论:把“src/”而不是
cd src;
弄乱cd -;
。注意$n
和$n2
都被使用[您不能嵌套${var/A/B}构造,对吗?]