tdlight-java-natives/.docker/SymlinkPrefix.javash
2023-08-29 12:36:01 +02:00

28 lines
1.6 KiB
Plaintext
Executable File

#!/usr/bin/java --source 11
import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes;
public class Main {
/** @param args directory, sourcePrefix, targetPrefix */
public static void main(String[] args) throws IOException {
Path dir = Path.of(args[0]).toAbsolutePath().normalize();
Path sourcePrefix = dir.resolve(Path.of(args[1])).normalize();
Path targetPrefix = dir.resolve(Path.of(args[2])).normalize();
System.out.printf("Replacing symlinks in '%s' from '%s' to '%s'%n", dir, sourcePrefix, targetPrefix);
Files.walkFileTree(dir, new SimpleFileVisitor<>() {
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (attrs.isSymbolicLink()) {
var originalTarget = Files.readSymbolicLink(file).normalize();
if (originalTarget.startsWith(sourcePrefix)) {
var symlinkFileDir = file.getParent();
originalTarget = symlinkFileDir.resolve(originalTarget);
Files.delete(file);
var target = symlinkFileDir.relativize(targetPrefix.resolve(sourcePrefix.relativize(originalTarget))).normalize();
Files.createSymbolicLink(file, target);
System.out.printf("Symlink at '%s' pointing at '%s' is now pointing at '%s'%n", file, originalTarget, target);
}
}
return FileVisitResult.CONTINUE;
}
});
}
}