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
В нем перечислены все файлы Java в дереве src; затем для каждого из них удаляется суффикс ".java" (cut -d '.' -f2
, потому что вывод find .
имеет префикс .
). Затем он использует -nt
, чтобы проверить, является ли файл Java в дереве src более новым, чем соответствующий файл класса в дереве сборки; если он новее, это вывод. [javac может затем использовать это для компиляции только необходимых файлов src, вместо использования ant
или make
]
Проблема в том, что она слишком медленная и занимает около 275 мс. Как сделать это быстрее?
Или есть более быстрый способ сделать это в bash? Я не вижу, как это сделать с find
, diff
, rsync
или make
(который, кажется, не пересекает деревья автоматически и нуждается в явно перечисленных исходных файлах).