public static void deepCopy(Path src, Path dest) throws IOException {
        try (Stream<Path> stream = Files.walk(src)) {
            stream.forEach(source -> copy(source, dest.resolve(src.relativize(source))));
        }
    }
Obtains a write lock on lockFilePath then runs the work. Creates lockFilePath
if it doesn't exist. Will block if another thread/jvm holds a lock on the same
file.
stroom-util/src/main/java/stroom/util/io/FileUtil.java